/// <summary>スレッド関数を実行</summary> private void button1_Click(object sender, RoutedEventArgs e) { // 実行時間を生成 int execTime = 0; int maxExecTime = 0; if (Int32.TryParse(this.textBox1.Text, out maxExecTime) == false) { MessageBox.Show("実行時間が認識できない!"); return; } else { Random random = new Random(); execTime = random.Next(maxExecTime); } // Threadに渡すThread関数付クラスを生成 Waiting wainting = new Waiting(); wainting.SetResult = new Waiting.SetResultDelegate(this.SetResult) ; wainting.SleepTime = execTime; if (this.ThreadCount >= 10) { // 10Thread以上は同時起動しない。 MessageBox.Show("10Thread以上は同時起動しない!"); } else { // Thread数情報をインクリメント this.ThreadCount++; this.label1.Content = this.ThreadCount.ToString(); // Threadを生成してThread関数を実行 Thread th = new Thread(new ThreadStart(wainting.Callback_MultiThread)); th.Start(); // 循環参照にならないように、 // Threadオブジェクトは投げっぱなす。 // デバック情報(主スレッド) Debug.WriteLine("主スレッド@button1_Click:" + Thread.CurrentThread.ManagedThreadId.ToString()); } }
/// <summary>スレッド関数を実行</summary> private void button1_Click(object sender, RoutedEventArgs e) { // 実行時間を生成 int execTime = 0; int maxExecTime = 0; if (Int32.TryParse(this.textBox1.Text, out maxExecTime) == false) { MessageBox.Show("実行時間が認識できない!"); return; } else { Random random = new Random(); execTime = random.Next(maxExecTime); } // Threadに渡すThread関数付クラスを生成 Waiting wainting = new Waiting(); wainting.SetResult = new Waiting.SetResultDelegate(this.SetResult); wainting.SleepTime = execTime; if (this.ThreadCount >= 10) { // これ以上はキューイングできない。 MessageBox.Show("これ以上はキューイングできない!"); } else { // Thread数情報をインクリメント this.ThreadCount++; this.label1.Content = this.ThreadCount.ToString(); // Thread関数をThreadPoolに追加して実行 ThreadPool.QueueUserWorkItem(new WaitCallback(wainting.Callback_UseThreadPool)); // デバック情報(主スレッド) Debug.WriteLine("主スレッド@button1_Click:" + Thread.CurrentThread.ManagedThreadId.ToString()); } }