【发布时间】:2016-04-04 08:54:51
【问题描述】:
我有一个线程在某个时间间隔内将点添加到 zedgraph 组件上。我需要在按下复选框时暂停添加点,然后在再次按下复选框时继续添加它们。以下是我的线程:
public class myThread{
ManualResetEvent pauseResumeThread = new ManualResetEvent(true);
public void threadHeartrateGraph()
{
for (int k = 15; k < _hr.Length; k++)
{
pauseResumeThread.WaitOne();
if (HRDataSummary.threadPause == true)
{
break;
}
x = k;
y = _hr[k];
list1.Add(x, y);
_displayHRGraph.Invoke(list1, graph_HeartRate, _GraphName[0]);
graph_HeartRate.XAxis.Scale.Min = k-14;
graph_HeartRate.XAxis.Scale.Max = k+1;
Thread.Sleep(_interval * 1000);
}
}
catch (NullReferenceException)
{
}
}
public void play()
{
pauseResumeThread.Set();
}
public void pause()
{
pauseResumeThread.Reset();
}
}
然后,我从一个复选框中调用了播放和暂停线程。
private void checkBoxPause_CheckedChanged(object sender, EventArgs e)
{
if(checkBoxPause.Checked == true)
{
//HRDataSummary.threadPause = true;
checkBoxPause.Text = "Play >";
myThread mythread = new myThread();
Thread pause = new Thread(mythread.pause);
pause.Start();
}
if (checkBoxPause.Checked == false)
{
//HRDataSummary.threadPause = false;
checkBoxPause.Text = "Pause ||";
myThread mythread = new myThread();
Thread play = new Thread(mythread.play);
play.Start();
}
}
我错过了什么?还是使用 ManualResetEvent 是完全错误的?
【问题讨论】:
-
为什么要在每个 if-Statement 中创建一个新的 myThread-Object?
-
以下链接展示了您问题的答案。 [点击这里(stackoverflow.com/a/2431028/6007610)
-
@Anto 这就是他已经拥有的,但他的 Checkbox-Code 完全关闭了。
-
直接调用
pause和play就可以了,无需为它启动线程。 -
(1)
if(checkBoxPause.Checked == true)==> if(checkBoxPause.Checked)` 和if(checkBoxPause.Checked == false)==>if(! checkBoxPause.Checked)或者更好的是else(2)catch没有关联try
标签: c# multithreading winforms