我正在創建一個WPF MVVM應用程序。我有一個漫長的過程,我想在另一個線程中運行,同時向用戶顯示一個繁忙的指示符。我遇到的問題如下:C#如何關閉另一個線程的主UI線程上的窗體形式
BusyIndicator控件的IsBusy屬性綁定到實現INotifyPropertyChanged接口的視圖模型的IsBusy公共屬性。如果我使用Join運行下面的代碼,那麼用戶界面不會顯示繁忙指示器,因爲主UI線程正在等待線程「t」完成。如果我刪除了聯接,那麼託管WPF的Windows窗體關閉得太早。我知道跨線程訪問Windows窗體是一個不錯的選擇,但是我只想關閉窗體我最簡單的解決方案是將_hostForm.Close()移動到「DoLongProcess」方法的末尾。當然,如果我這樣做,我會得到一個交叉線程異常。您能否建議採取這種情況下的最佳方法?
<extToolkit:BusyIndicator IsBusy="{Binding Path=IsBusy}" >
<!-- Some controls here -->
</extToolkit:BusyIndicator>
private void DoSomethingInteresting() {
// Set the IsBusy property to true which fires the
// notify property changed event
IsBusy = true;
// Do something that takes a long time
Thread t = new Thread(DoLongProcess);
t.Start();
t.Join();
// We're done. Close the Windows Form
IsBusy = false;
_hostForm.Close();
}
http://stackoverflow.com/a/947482/532647 –