2012-04-04 5 views
1

私は、メッセージが徐々に現れるUserControlを持っています。そして、数秒後に再び退色します。このコントロールはbackgroundWorkerを使用します。それは大丈夫です。しかし、私のようにメッセージを表示する責任があるメソッドのオーバーロードを追加する必要があります。今UIコントロールを待つ最善の方法は?

ShowMessage(string message, bool waitToHide) { .. } 

、私は上記の方法であるために最善の方法は、呼び出し元のスレッド(UIスレッド)を作るために知っている待機する必要があり。


私は内部のBackgroundWorkerが完了しましたが、この方法は、メインアプリケーションで頻繁に使用されているので、私はいくつかの散乱ものに多くの統一スコープを破る必要があることを起動する範囲を通知するイベントを発生させることを試みました。あなたは非同期CTPなし.NET 3.5または.NET 4に固執する必要がある場合、私はあなたのコードを分割避けることができるとは思わない

{ 
    // before.. 
    messageDisplayer1.ShowMessage("test", true); 
} 

void messageDisplayer1_Done() 
{ 
    // after.. 
} 

答えて

3

{ 
    // before code snippet.. 
    messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

がに変わります(コードをDoEventsで捨てる場合を除き、間違いなく推奨されています)。一方

async extensions(.NET 4またはバージョンのためのいずれかのCTPは、.NET 4.5の中に含まれている)あなたはこのような何かすることができます:

{ 
    // before code snippet.. 
    await messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

その後、コンパイラを自動的プット( "続き)にコード"後のコードスニペット "を挿入します。これは、ShowMessageが完了を通知するとすぐに実行されます。その間、コントロールはWindowsのメッセージループに戻され、プログラムのUIは応答したままになります。

関連する問題