如何退出我的线程?

时间:2016-12-16 08:05:20

标签: c# multithreading

所以我已经让这个线程继续检查某个程序是否正在运行,但是当我尝试通过将ThreadStatus更改为false来结束它时它会继续运行。

    public bool ThreadStatus = true;

    public void Run()
    {
        while (ThreadStatus)
        {
            Thread.Sleep(2000);
            Process[] nProcess = Process.GetProcessesByName(processName);

            if (nProcess.Length > 0)
            {
                if (!nProcess[0].HasExited && ThreadStatus == true)
                {
                    nProcess[0].Kill();
                }
            }
        }
    }

    public void StartThread()
    {
        thread = new Thread(new ThreadStart(this.Run));
        thread.Start();
    }

2 个答案:

答案 0 :(得分:1)

在Task上使用取消令牌而不是中止线程。参考:https://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx

答案 1 :(得分:-1)

ThreadStatus应为volatile

public volatile bool ThreadStatus = true;

  

volatile关键字警告编译器多个线程将访问ThreadStatus数据成员,因此它不应对该成员的状态做出任何优化假设。

More on volatile