我想将Azure AD身份验证添加到我的桌面应用程序,因此我有一个OAuth2访问令牌,可以用于Web API。身份验证本身正在运行,我的问题是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
来避免该错误,但是它没有用。
有什么办法解决这个问题吗?
答案 0 :(得分:0)
目前,我认为这是3.18版中引入的Microsoft.IdentityModel.Clients.ActiveDirectory nuget中的错误,并将在其GitHub存储库上引发一个问题。如果您可以降级到3.17.3版本,则将看到相同的代码有效,并且不会引发跨线程异常。