日期:2014-05-17  浏览次数:20996 次

线程暂停和继续问题
我写的程序在界面上有三个按钮,开始、暂停、停止
在点击开始按钮后开始一个线程,我想点击暂停后就使线程暂停,但是用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解决这个问题,虽然不能立刻暂停线程,但其实也差不多,用户没感觉,
------解决方案--------------------
引用:
哥们,你真想处处waitone呀!那你可以在每个语句上面,reset,waitone!嘿嘿!

你这个需求,只有Suspend()和Resume()能够实现,但是注意临界资源,死锁等问题!
我最近也做了一个多线程的模块,我建议是,点击按钮后提示“正在暂停线程...”,等各个一个线程执行的函数完毕后,再提示“线程已经停止!”。这样才算是安全的暂停了线程!