2011-01-20 13 views
1

長いジョブを処理するC#アプリケーションがあります。私にはいくつかの制限があります。そのために、例えばバックグラウンドスレッドでその長い仕事を実行する余裕がありません。私が使用しているいくつかのCOMオブジェクトは、バックグラウンドスレッドで使用できません。この長いジョブをUIスレッドで処理し、進行状況レポートでUIを更新するにはどうすればよいですか。UIスレッドで長いプロセスを実行し、進行状況を報告するためにUIを更新する

大きなジョブを処理しているときにUIを反応させるには何かできますか?事前に

おかげで、

Bibek Dawadi

+0

COM/STAは、ThreadPoolを使用できないことを意味します。しかし、あなたは裸のスレッドを作成し、それらをbgにすることができます。 –

答えて

2

あなたがバックグラウンドスレッドからCOMオブジェクトを使用することができます。バックグラウンドスレッドもSTAスレッドであることを確認してください。 (仮定:COMオブジェクトはSTAオブジェクト自体です)。

Vista Aero以降では、ウィンドウをすばやくペイントしないと、Windowsが奇妙な判断を下します。同様に、ウィンドウの内容の古いバージョンの表示を開始します。これは、ウィンドウがペイントメッセージに2〜2回応答しない場合に開始されます。

0

このジョブが1つの大きなブロッキング呼び出しではなく、WinFormsを使用している場合、長時間実行されている操作の中からApplication.DoEvents()を呼び出すことができます。あなたがそれを呼び出すたびに、UIが更新されます(すべての保留中のウィンドウメッセージが処理されるため)、UIを応答させたいときに頻繁に呼び出します。

関連する問題