线程暂停和继续问题
我写的程序在界面上有三个按钮,开始、暂停、停止
在点击开始按钮后开始一个线程,我想点击暂停后就使线程暂停,但是用Suspend()和Resume()提示已经过时,在网上搜了很多解答,都不好。很多用的是ManualResetEvent中的WaitOne()和Set(),但是它只能是在固定的一个点暂停下来,而不能在按下暂停按钮的时刻线程完成了多少就在完成出暂停。
请问怎么解决?
大概代码结构如下:
public partial class L3
{
//新的的线程
private Thread thread;
public L3()
{
//线程初始化
thread = new Thread(new ThreadStart(ProcessSites));
}
//点击开始按钮
private void pictureBox_start_Click(object sender, EventArgs e)
{
if (是暂停状态)
恢复执行; //怎么写?
else
thread.Start();
}
//点击暂停按钮
private void pictureBox_pause_Click(object sender, EventArgs e)
{
//怎么写?
}
//点击停止按钮
private void pictureBox_stop_Click(object sender, EventArgs e)
{
thread.Abord();
}
//新线程调用的函数
private void ProcessSites()
{
code...;
code...;
}
}
}
[解决办法]
我就是用ManualResetEvent解决这个问题,虽然不能立刻暂停线程,但其实也差不多,用户没感觉,
[解决办法]
你这个需求,只有Suspend()和Resume()能够实现,但是注意临界资源,死锁等问题!
我最近也做了一个多线程的模块,我建议是,点击按钮后提示“正在暂停线程...”,等各个一个线程执行的函数完毕后,再提示“线程已经停止!”。这样才算是安全的暂停了线程!