我在复选框控件事件中设置了一个线程,,想实现不勾选复选框时结束线程,我添加了thread.Abort(),但是线程没有实现结束的效果,想问一下需要怎么修改呢?
```c#
Thread timethread = new Thread(new ThreadStart(senddate));
timethread.IsBackground = true;
timethread.Start();
ThreadStopFlg = true; //线程标志位
if (cbxtime.Checked == true)
{
tm.Start();
}
else
{
tm.Stop();
timethread.Abort();
while ((timethread.ThreadState != System.Threading.ThreadState.Stopped)&&(timethread.ThreadState != System.Threading.ThreadState.Aborted))
{
Thread.Sleep(1000);
}
}
```
你的标志位应该放在循环里去判断啊,你放在外面,线程一启动,就直接走过这段代码了,以后都不去检查标志位:
private volatile bool _stopThread;
private void senddate()
{
while (!_stopThread)
{
// 做你自己的操作
Thread.Sleep(1000);
}
}
private void cbxtime_CheckedChanged(object sender, EventArgs e)
{
if (cbxtime.Checked == true)
{
_stopThread = false;
tm.Start();
}
else
{
tm.Stop();
_stopThread = true;
}
}
试下只要这个条件?:
th.Abort();
while(th.ThreadState!=ThreadState.Aborted)
{
Thread.Sleep(100);
}
timethread 是个局部变量,你每次执行函数都会创建一个线程出来
你想停止之前建立好的线程,那要把它设置成全局变量才行