怎么样结束等待中的线程。当我执行EndThread()时,线程还在等待中,引发异常,有什么方法可以结束等待中的线程吗
Thread th;
private void ThreadTask()
{
th=new Thread(new ParameterizedThreadStart(ThreadTime));
th.IsBackground =true;
th.start();
}
private void ThreadTime()
{
Thread.Sleep(10000000);
//调用执行任务方法...
}
private void EndThread()
{
if(th!=null)
{
th.Abort();
}
}
Thread th;
private void ThreadTask()
{
th=new Thread(new ParameterizedThreadStart(ThreadTime));
th.IsBackground =true;
th.start();
}
private void ThreadTime()
{
Thread.Sleep(10000000);
//调用执行任务方法...
}
private void EndThread()
{
if(th!=null)
{
th.Abort();
}
}
另外,子线程有延时处理最好用ManuResetEvent.waitOne(2000),而不用thread.sleep(),这样通知子线程结束时可以
public void QuitSonThread()
{
_IsQuit=true;
_WaitEvent.Set();
}
这样就不用无效的等待了。
最后,结束线程时最好主线程用 Sonthread.Join()等待其完全结束了在座后续操作。
{
th.Join();
}用 th.Join 等待线程,这是死等。如果Thread不结束,Join会始终阻塞当前线程。
比较好的做法是,设置一个退出flag,在Thread里自己判断是否需要退出,
然后外部用 Join(timeout) 等待一个超时时间(单位ms)不过为了能随时停止,那么Thread不应该一口气执行那么长时间,比如:
Thread.Sleep(10000000);而应该拆开来,比如每执行1000ms 看看外部是否要求停止:int count = 10000;
while(!needStop && count > 0)
{
Thread.Sleep(1000);
count--;
}外部只要控制 needStop = true 就能立刻退出。
在Thread.Sleep(10000000);代码处引发异常.
能给一份完整结束挂起进程的代码吗.希望是测试通过的.谢谢!
{
//主线程
if(th!=null)
{
QuitSonThread();
th.Join();
// th.Abort(); //xxx不要
}
}//...
private void ThreadTime()
{
if( !_WaitEvent.WaitOne(10000000)) //如果等到了set信号,说明是主线程强制结束
{
//调用执行任务方法...
}
}