gpt4 book ai didi

c# - WPF 和后台 worker 以及调用线程必须是 STA

转载 作者:行者123 更新时间:2023-11-30 19:16:51 24 4
gpt4 key购买 nike

我已经实现了 Stack Overflow 问题的解决方案 Implement progressbar in this simple WPF application .

MainWindow 有自己的 View 模型。在该 View 模型中,我接收用户的输入并使用后台工作程序使用 WCF 服务。在 WCF 返回数据后,我试图在新窗口中显示它。这是发生错误的地方:

The calling thread must be STA, because many UI components require this.

我试图将 [STAThread] 属性放在 MainWindow 上 code-behind以及 MainWindowViewModel 构造函数内部。在这两种情况下都没有改变。

我错过了什么?

更新用户在viewmodel中点击命令后调用LoadData方法

private void LoadData(string searchBy)
{
IsBusy = true;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
switch (searchBy)
{
// WCF call to load data
}
}

worker.RunWorkerCompleted += (o, ea) =>
{
IsBusy = false;
};

worker.RunWorkerAsync();

最佳答案

Stack Overflow 上有很多重复的问题。例如,this question .

底线 - 无论何时创建 UI 组件,都必须使用单线程单元 (STA) 线程。后台 worker 不是STA。因此,您不能在后台工作程序中创建 UI 组件。您不能从后台 worker 更新 UI 组件。后台工作人员旨在在后台运行(这很令人惊讶),可能会处理数据并稍后返回结果。

关于c# - WPF 和后台 worker 以及调用线程必须是 STA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com