我已經實施了堆棧溢出問題的解決方案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