【发布时间】:2018-09-28 01:04:39
【问题描述】:
我想将 Azure AD 身份验证添加到我的桌面应用程序,因此我有一个可用于 Web API 的 OAuth2 访问令牌。身份验证本身有效,我的问题是parentWindow。只要身份验证窗口可见,我不希望我的表单可访问/可单击。但是每次我将我的主表单指定为parentWindow 时,我都会收到一个带有消息的InvalidOperationException:
跨线程操作无效:控件“FormMain”从创建它的线程以外的线程访问。
如果我只将表单的句柄指定为parentWindow 参数(它只需要一个object),它会显示“BrowserAuthenticationWindow”而不是“FormMain”,但错误是相同的。这是发生错误的代码行:
var token = await authContext.AcquireTokenAsync(
resourceUri, ClientId, new Uri(redirectUri),
new PlatformParameters(PromptBehavior.Auto, parentWindow));
// also doesn't work: parentWindow.Handle
我也尝试通过使用InvokeRequired 来避免该错误,但没有奏效。
有什么办法解决这个问题吗?
【问题讨论】:
-
你能解决问题吗?
-
不,如果我回答了,我会自己回答这个问题。
标签: c# .net multithreading winforms adal