我已经实施了堆栈溢出问题的解决方案Implement progressbar in this simple WPF application。WPF和后台工作者和调用线程必须是STA
MainWindow有它自己的视图模型。在该视图模型中,我收到用户的输入并使用后台工作人员使用WCF服务。在WCF提供数据后,我试图在新窗口中显示它。这是发生错误的地方:
调用线程必须是STA,因为许多UI组件需要 这个。
我试图把[STAThread]
属性的主窗口code-behind还有MainWindowViewModel构造器内。在这两种情况下都没有改变
我错过了什么?
更新 用户点击命令后,在视图模型调用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();
你在哪里创建'BackgroundWorker'? – Douglas
消息中的“调用线程”不是您的UI线程。这是WCF回调线程。您需要使用Dispatcher,SynchronizationContext等将该后台线程的调用编组到您的UI线程中。 –
@Douglas我在按钮单击后使用wcf调用来创建BackgroundWorker。 – user1765862