我有這個在我的App.xaml:WPF CrossThreadException在App.xaml中與BackgroundWorker的
public App()
{
_backgroundWorker = new BackgroundWorker();
_backgroundWorker.DoWork += new DoWorkEventHandler(DoBackgroundWork);
_backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BackgroundCompleted);
_backgroundWorker.RunWorkerAsync();
_splashView = new SplashView();
_splashView.Show();
}
的DoBackgroundWork
方法執行某些數據庫設置,然後BackgroundCompleted
事件關閉_splashView
並顯示_mainView
。
但是,從BackgroundCompleted
修改_splashView
中的任何內容都會導致出現交叉線程異常,這是我通過後臺工作人員設計要解決的問題。我猜這跟App.Xaml
背景工作的方式有關。也許這是一個糟糕的方式來做閃屏?
對,我已經添加了BeginInvoke使它工作。我想知道爲什麼我在BackgroundCompleted中需要這個。這個事件不應該在UI線程上觸發嗎?我認爲這是BackgroundWorkers的重點。 – ConditionRacer
@ Justin984對不起,我錯過了'BackgroundCompleted'拋出異常。它正在拋出,因爲不能保證該方法將在哪個線程上執行。邏輯會決定它應該返回到具有事件處理程序的線程,但事實並非如此。 [相似解答](http://stackoverflow.com/questions/818767/backgroundworker-onworkcompleted-throws-cross-thread-exception) –
有趣!我不知道。所以即使在UI線程上創建了backgroundworker,它的完成事件也不能保證在UI線程上觸發?我有一些代碼來解決! – ConditionRacer