2016-08-11 3 views
0

私はそうのようなバックグラウンドスレッドで実行しているしたいメソッドを呼び出しています:Task.Runで始まったメソッドでShowDialogを呼び出すことは安全ですか?

Task.Run(() => CleanupLogs()); 

CleanupLogs方法は、特定の日数より古いログファイルを削除します。 try/catchブロックで削除を実行します。例外がある場合、Window.ShowDialogを介してユーザーに例外が表示されます。それは安全ですか?そうでない場合は、UIスレッドでWindow.ShowDialogを実行する方法はありますか?

+0

安全とはどういう意味ですか? –

+0

@EyalPerry私はモーダルダイアログや実際にはモーダルではない問題や、私が気づいていないかもしれない他の問題を引き起こすことを意味します。私はWPFの新機能ですが、たとえば、すべてのユーザー対話がUIスレッド上になければならないことがわかります。私は、メインスレッド以外のスレッドからShowDialogを呼び出すことに問題があるかどうかを調べようとしています。 – SSteve

+0

そのメソッドの名前を* CleanupLogsAndShowExceptionIfAny *に変更する必要があります。これが醜い名前だと思うなら、あなたのコードで何をしているのかを記述するだけです。 A * CleanupLogs *メソッドはログをクリーンアップするだけで、何らかの問題が発生した場合には例外を送出する必要があります。そのメソッドの外で例外(ユーザに通知する...)を処理し、この種の質問について考える必要はありません:o) –

答えて

0

あなたがSTAモデル例外を取得しない限り、あなたは大丈夫でしょう。しかし、ウィンドウ/ダイアログを表示する必要がある場合は、すべてのWPF FrameworkElement(DispatcherObjectから継承されている)とメインApplicationクラスで使用可能なDispatcherオブジェクトへの参照があることを確認してください。

Application.Current.Dispatcher.BeginInvoke(
    DispatcherPriority.Background, 
    new Action(() => Window.ShowDialog())); 

詳細はWPF Inside Out: Dispatcherを参照してください。

関連する問題