在 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 通知,并确保对话框在完成后引发事件。