gpt4 book ai didi

c# - 暂停和恢复线程事件

转载 作者:太空狗 更新时间:2023-10-30 01:16:08 32 4
gpt4 key购买 nike

我有一个线程在特定的时间间隔内将点添加到 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?

最佳答案

首先你在全局声明你的 myThread 对象(只有一个!)。

myThread heartGraph = new myThread()

然后您想在一个新线程中启动您的 Worker-Method。

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();
}

关于c# - 暂停和恢复线程事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36398272/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com