我只与WinForms合作,并决定继续使用WPF,但遇到了一个我无法解决的问题:
我想通过vk.com通过vkApi授权,要做到这一点,我必须传递委托返回字符串和代码为2因子auth。
p.TwoFactorAuthorization = () =>
{
var two = new TwoFactor();
two.ShowDialog();
return two.Data;
};我决定^创建一个对话框窗口,但是得到了“调用线程必须是STA,因为许多UI组件都需要这个”。
vk.Authorize(p);好的,这意味着这个^方法在里面创建了一个新线程,我需要从UI线程中显示我的对话框,对吗?
我发现Dispatcher.Invoke可以帮助我(不是BeginInvoke,因为我需要返回字符串)并编写了以下内容
return Dispatcher.Invoke(() =>
{
var two = new TwoFactor();
two.ShowDialog();
return two.Data;
}));但现在,我的应用程序只是冻结,没有对话框出现!我做错了什么?
发布于 2019-10-29 12:29:41
我发现api阻塞了主线程,所以我调用了AuthorizeAsync(),主线程可以通过Dispatcher.Invoke()显示对话框。
看起来是这样的:
public void Func()
{
vkParams.TwoFactor = () =>
{
return Dispatcher.Invoke(() =>
{
var two = new TwoFactor();
two.ShowDialog();
return two.Data;
}));
}
}
private async void Auth()
{
vkParams.Login = t_login.Text;
vkParams.Password = t_pass.Text;
await vkApi.AuthorizeAsync(vkParams);
}https://stackoverflow.com/questions/58582326
复制相似问题