这是我的第一篇文章,如有错误请见谅。
我有一个返回字符串的任务。在该任务中,我想打开一个新窗口,用户可以在其中输入代码。输入代码并关闭窗口后,任务将返回代码。
我的代码如下:
public Task<string> GetLoginCode()
{
return Task.Run(() =>
{
CodeRequestView view = new CodeRequestView();
CodeRequestViewModel viewModel = new CodeRequestViewModel();
view.ShowDialog();
return viewModel.Code;
});
}
我遇到的问题是,当我运行我的项目时,我收到“调用线程必须是 STA,因为许多 UI 组件需要这个。” CodeRequestView.xmal.cs 文件的构造函数中出现异常。
如能提供解决此问题的帮助,我们将不胜感激。 谢谢!
最佳答案
当您从非 UI 线程调用 UI
时,您可以使用 UI 线程,例如 Dispatcher
。
public Task<string> GetLoginCode()
{
return Task.Run(() =>
{
CodeRequestViewModel viewModel = new CodeRequestViewModel();
Application.Current.Dispatcher.Invoke(delegate
{
CodeRequestView view = new CodeRequestView();
view.ShowDialog();
});
return viewModel.Code;
});
}
关于c# - WPF - 尝试在任务中打开一个新窗口但收到 "The calling thread must be STA exception",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37648693/