■ メソッド
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