SuspendRequested | WaitSleepJoin
th1.ThreadState = Suspended;
原本我是有一个主线程
public partial class Form1 : Form { private Thread th1 = null; //执行后台运转的主线程 button1_click(...) { th1 = new Thread(Operate); th1.start(); } public void Operate { while(true) { ...... Thread.sleep(10000); } } button2_click(...) { th1.Suspend(); } Form1_FormClosing(...) { if (th1.ThreadState.ToString() == "Suspended" ) { th1.Resume(); th1.Abort(); } else th1.Abort(); } }
我在点击了btn1 btn2 之后点击关闭按钮 就出现了这么错误
线程被挂起;正在尝试中止。
据说是因为sleep导致的这个问题 这样要怎么解决?
Suspend()已经不推荐使用了,我做程序时候要么设置公共变量让线程自动执行完,要么直接用try{Abort()}catch{}把线程直接干掉。
有一种不太完美的解决方案,设置th1.IsBackground = true; 在From_closing中,不用管th1的状态,主窗体退出后,线程也会退出。 说不太完美就是,万一线程在执行任务的话,可能执行一半就退出了。所以你必须能保证线程执行的任务可以中断。
针对lz的问题,我的解决办法是, 在Form_closing中,判断th1的状态,并且等待th1的状态为runing时执行abort(), 你遇到的那个异常,估计是当时线程仍旧处于sleep状态,你去终止时产生的异常。
cnblogs也整理出了线程的知识库:http://kb.cnblogs.com/page/42528/ 你去看看