所以我已经让这个线程继续检查某个程序是否正在运行,但是当我尝试通过将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();
}
答案 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
数据成员,因此它不应对该成员的状态做出任何优化假设。