c# - WPF - 尝试在任务中打开一个新窗口但收到 "The calling thread must be STA exception"

标签 c# wpf multithreading

这是我的第一篇文章,如有错误请见谅。

我有一个返回字符串的任务。在该任务中,我想打开一个新窗口,用户可以在其中输入代码。输入代码并关闭窗口后,任务将返回代码。

我的代码如下:

 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/

相关文章:

c# - 如何在不必生成所有类的情况下使用 Linq-to-SQL?

c# - 如何在 asp.net 中创建 303 响应

c# - 聚类系数 C#

c# - VSPerf 和 A​​zure 云服务

java - 我应该把工作线程放在哪里

c# - 为什么 ObservableCollection 不支持批量更改?

C# WPF,日期选择器验证

c# - 如何使用 C# 在 WPF 中开发类似 Google Chrome 浏览器的应用程序

multithreading - 已经处理许多并发结果中的两个,优化 - 架构?算法?

python - 如何将异步生成器合并到 python 3.5+ 中的普通生成器中