在后台做了一个一直运行的线程;当点击退出按钮,触发退出事件后,希望后台程序把没有做完的做完,然后修改完成标志,最后,退出事件拿到这歌标志后,退出程序;1.在按钮的事件里,我设置了退出flag(初始:flag = false,触发退出事件修改为true);2.这个时候,让退出事件的线程在这里等待( while(!IsExit){thread。sleep(3000);})(初始:IsExit = false)3.在后台线程里,当flag=true时,在完成当前操作后,修改IsExit=true;结束线程;4.退出事件,结束睡眠,做最后的退出系统操作;可实际情况是,一直在做第二步;我以为是线程的优先级不对,但是把后台的优先级设置高于事件的优先级,没作用,望高手赐教。如果是我处理的有问题,应该怎么处理。

解决方案 »

  1.   

    应该是while(!IsExit)这个一直不满足,进入调试看IsExit的值吧
      

  2.   

    把IsExit这个变量设置为全局的呢,静态的呢,实在不行在退出的时候直接将线程停掉不就完了啊,我就是直接停掉线程
      

  3.   


    很奇怪啊vs2005  线程里的内容一会可以调试一会又没法调试,刚才还直接出错“无法导航到XXX(一个方法)”,我很郁闷。还忘高手赐教。
      

  4.   

    Try this
     public partial class Form2 : Form
        {
            private readonly AutoResetEvent wait = new AutoResetEvent(false);        public Form2()
            {
                InitializeComponent();
            }        protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                new Thread(ThreadWork).Start();
            }        private void button1_Click(object sender, EventArgs e)
            {
                wait.WaitOne();
                // do exit here
                Console.WriteLine("ready to exit now");
            }        public void ThreadWork()
            {
                Thread.Sleep(15000);// replace this with the real work
                
                wait.Set();
            }
        }