public void setText2(Object obj) { progressValue pv = (progressValue)obj; Monitor.Enter(pv); //if (pv.v1 == pv.v2) { // progressValue pv = new progressValue(progressBar1.Value, progressBar2.Value); Monitor.PulseAll(pv); if (Monitor.Wait(pv, 1000)) { if (progressBar2.Value < progressBar2.Maximum) { progressBar2.PerformStep(); pv.v2 = progressBar2.Value; } ; listBox1.Items.Add(progressBar2.Name + " Step:" + Convert.ToString(progressBar2.Value)); listBox1.Refresh(); } } Monitor.Exit(pv); }
public void setText1(Object obj) { // while (progressBar1.Value < progressBar2.Value) // { //progressValue pv = new progressValue(progressBar1.Value, progressBar2.Value); progressValue pv = (progressValue)obj; Monitor.Enter(pv); // while (pv.v1 < pv.v2) { Monitor.Wait(pv); if (progressBar1.Value < progressBar1.Maximum) { progressBar1.PerformStep(); pv.v1 = progressBar1.Value; } ; listBox1.Items.Add(progressBar1.Name + " Step:" + Convert.ToString(progressBar1.Value)); listBox1.Refresh(); Monitor.PulseAll(pv); } listBox1.Items.Add(progressBar1.Name + " Step Comlete:" + Convert.ToString(progressBar1.Value)); listBox1.Refresh(); // Monitor.Exit(pv); // } }
private void button1_Click(object sender, EventArgs e) { listBox1.Items.Add("Main Thread Start"); listBox1.Refresh(); t1 = null; t2 = null; progressValue pv2 = new progressValue(progressBar1.Value, progressBar2.Value); t1 = new Thread(new ParameterizedThreadStart(play1)); t1.Name = "線程1"; t1.Start(pv2); // t2 = new Thread(new ParameterizedThreadStart(play2)); t2.Name = "線程2"; t2.Start(pv2); //Monitor.TryEnter(); //t1.Join(); /* * int i = 0; * while (i<10) { * listBox1.Items.Add("Main Thread IDLE"); * listBox1.Refresh(); * Thread.Sleep(300); * i++; * } */ }