C# 暂停并恢复线程活动
我有一个线程,它在某个时间间隔将点添加到zedgraph组件上。我需要在按下复选框时暂停添加点,然后在再次按下复选框时继续添加点。以下是我对线程的了解:C# 暂停并恢复线程活动,c#,multithreading,winforms,C#,Multithreading,Winforms,我有一个线程,它在某个时间间隔将点添加到zedgraph组件上。我需要在按下复选框时暂停添加点,然后在再次按下复选框时继续添加点。以下是我对线程的了解: public class myThread{ ManualResetEvent pauseResumeThread = new ManualResetEvent(true); public void threadHeartrateGraph() {
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();
}
}
我错过了什么?或者使用ManualResetEvent是完全错误的吗?首先,您全局声明您的
myThread
对象(只有一个!)
然后,您希望在新线程中启动Worker方法
Thread worker = new Thread(heartGraph.threadHeartrateGraph);
worker.Start();
现在,您可以使用ManualResetEvent暂停/恢复工作
if (checkBoxPause.Checked == true) {
//HRDataSummary.threadPause = true;
checkBoxPause.Text = "Play >";
heartGraph.pause();
} else {
//HRDataSummary.threadPause = false;
checkBoxPause.Text = "Pause ||";
heartGraph.play();
}
为什么要在每个if语句中创建一个新的myThread对象?下面的链接演示了问题的答案。[单击此处()@Anto这是他已经拥有的,但是他的复选框代码完全关闭。只需直接调用
pause
和play
,无需为其设置线程。(1)if(checkBoxPause.Checked==true)
=>if(checkBoxPause.Checked)`和if(checkBoxPause.Checked==false)
=>if(!checkBoxPause.Checked)
或者更好的方法是否则
(2)捕获
没有关联的尝试
Thread worker = new Thread(heartGraph.threadHeartrateGraph);
worker.Start();
if (checkBoxPause.Checked == true) {
//HRDataSummary.threadPause = true;
checkBoxPause.Text = "Play >";
heartGraph.pause();
} else {
//HRDataSummary.threadPause = false;
checkBoxPause.Text = "Pause ||";
heartGraph.play();
}