■ メソッド
ManualResetEvent.WaitOneメソッド
* スレッドをブロック * ManualResetEvent.Setメソッドを呼び出すまで待機
ManualResetEvent.Setメソッド
* 指定したイベントの状態をシグナル状態に設定
■ サンプル
// 非シグナル状態でManualResetEventオブジェクトを作成 ManualResetEvent manualEvent = new ManualResetEvent(false); private void button1_Click(object sender, EventArgs e) { // スレッドを作成し、開始する Thread thread = new Thread(this.ThreadProccess); thread.Start(); } private void button2_Click(object sender, EventArgs e) { // シグナル状態にする this.manualEvent.Set(); } // 別スレッドで実行するメソッド private void ThreadProccess() { for (int i = 0; i < 10; i++) { // シグナル状態になるまでスレッドをブロックする this.manualEvent.WaitOne(); // 非シグナル状態にする this.manualEvent.Reset(); // InvokeでFrom上のListBoxに表示させる this.Invoke(new MethodInvoker( delegate { this.listBox1.Items.Add(i.ToString()); })); } }
参考資料
http://www.ipentec.com/document/document.aspx?page=csharp-wait-thread-proc-blockhttp://codezine.jp/article/detail/139
http://gushwell.ldblog.jp/archives/51848592.html
http://d.hatena.ne.jp/ham007/20080825/1219676231
http://www.atmarkit.co.jp/ait/articles/0506/15/news114_3.html
http://takabosoft.com/20120328075216.html