c# 使用线程,如何结束

我在复选框控件事件中设置了一个线程,,想实现不勾选复选框时结束线程,我添加了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 是个局部变量,你每次执行函数都会创建一个线程出来
你想停止之前建立好的线程,那要把它设置成全局变量才行