首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

线程暂停和继续有关问题

2012-12-23 
线程暂停和继续问题我写的程序在界面上有三个按钮,开始、暂停、停止在点击开始按钮后开始一个线程,我想点击

线程暂停和继续问题
我写的程序在界面上有三个按钮,开始、暂停、停止
在点击开始按钮后开始一个线程,我想点击暂停后就使线程暂停,但是用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()能够实现,但是注意临界资源,死锁等问题!
我最近也做了一个多线程的模块,我建议是,点击按钮后提示“正在暂停线程...”,等各个一个线程执行的函数完毕后,再提示“线程已经停止!”。这样才算是安全的暂停了线程!

热点排行