C# 如何退出线程?
因此,我让这个线程继续检查某个程序是否正在运行,这很好,但是当我试图通过将ThreadStatus更改为false来结束它时,它只会继续运行C# 如何退出线程?,c#,multithreading,C#,Multithreading,因此,我让这个线程继续检查某个程序是否正在运行,这很好,但是当我试图通过将ThreadStatus更改为false来结束它时,它只会继续运行 public bool ThreadStatus = true; public void Run() { while (ThreadStatus) { Thread.Sleep(2000); Process[] nProcess = Process.G
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();
}
ThreadStatus
应为volatile
:
public volatile bool ThreadStatus=true代码>
volatile关键字提醒编译器多个线程将访问ThreadStatus
数据成员,因此它不应对此成员的状态进行任何优化假设
ThreadStatus
应为volatile
:
public volatile bool ThreadStatus=true代码>
volatile关键字提醒编译器多个线程将访问ThreadStatus
数据成员,因此它不应对此成员的状态进行任何优化假设
对任务使用取消令牌,而不是中止线程。参考:在任务上使用取消令牌,而不是中止线程。ref:让我们打开优化ThreadStatus
关闭:public volatile bool ThreadStatus=true代码>终止线程的可能重复从来都不是一个好选项:)~@DmitryBychenko当我切换到volatile
时,没有任何变化将while(ThreadStatus)
更改为while(volatile.Read(ref ThreadStatus))
。不要将字段声明更改为volatile
。正如Eric Lippert所说:让我们打开ThreadStatus
关闭优化:public volatile bool ThreadStatus=true代码>终止线程的可能重复从来都不是一个好选项:)~@DmitryBychenko当我切换到volatile
时,没有任何变化将while(ThreadStatus)
更改为while(volatile.Read(ref ThreadStatus))
。不要将字段声明更改为volatile
。正如Eric Lippert所说:评论中提到了这一点,OP已经回应了这一点,但它并没有解决问题。评论中提到了这一点,OP已经回应了这一点,但它并没有解决问题