私は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 –