在 WPF 中打开模式对话框以获取 CefSharp 的凭据
Open modal dialog in WPF to get credentials for CefSharp
我有一个 WPF 应用程序,它正在托管来自 Skype for business 的对话 window; window 可以打开一个子控件,一个 Chromiun 网络浏览器 (CefSharp)。
浏览器打开一个需要凭据的站点,因此覆盖方法 GetAuthCredentials 以处理请求。
代码如下:
AuthBox dlg = new AuthBox();
dlg.Owner = _parent;
dlg.ShowDialog();
callback.Continue(dlg.Username, dlg.Password);
问题是:我需要将此对话框设置为模态对话框,以便锁定父项 window(对话);因此,dlg.Owner = _parent;被添加。但是,这会引发异常:
System.InvalidOperationException: 'The calling thread cannot access this object because a different thread owns it.'
使用dispatcher.BeginInvoke无效。
有没有其他方法可以打开登录 window(模态)来避免这个线程问题?
我认为 dispatcher.BeginInvoke 对您不起作用,因为它不会阻塞?
尝试使用同步原语,例如 ManualResetEvent,在 UI 线程中打开对话框,在调用线程中等待 ManualResetEvent 通知,并确保对话框在完成后引发事件。
我有一个 WPF 应用程序,它正在托管来自 Skype for business 的对话 window; window 可以打开一个子控件,一个 Chromiun 网络浏览器 (CefSharp)。 浏览器打开一个需要凭据的站点,因此覆盖方法 GetAuthCredentials 以处理请求。 代码如下:
AuthBox dlg = new AuthBox();
dlg.Owner = _parent;
dlg.ShowDialog();
callback.Continue(dlg.Username, dlg.Password);
问题是:我需要将此对话框设置为模态对话框,以便锁定父项 window(对话);因此,dlg.Owner = _parent;被添加。但是,这会引发异常: System.InvalidOperationException: 'The calling thread cannot access this object because a different thread owns it.'
使用dispatcher.BeginInvoke无效。 有没有其他方法可以打开登录 window(模态)来避免这个线程问题?
我认为 dispatcher.BeginInvoke 对您不起作用,因为它不会阻塞? 尝试使用同步原语,例如 ManualResetEvent,在 UI 线程中打开对话框,在调用线程中等待 ManualResetEvent 通知,并确保对话框在完成后引发事件。