如何优雅地终止c#中的线程而不使用abort

avatar
作者
猴君
阅读量:0

在C#中,尽量避免使用Thread.Abort()方法来终止线程,因为这可能导致资源泄漏和其他不可预测的问题

  1. 使用标志变量:
private volatile bool _stopRequested;  public void StopThread() {     _stopRequested = true; }  public void MyThreadMethod() {     while (!_stopRequested)     {         // 执行任务     } } 
  1. 使用CancellationToken
private CancellationTokenSource _cts;  public void StartThread() {     _cts = new CancellationTokenSource();     var token = _cts.Token;      Task.Factory.StartNew(() =>     {         while (!token.IsCancellationRequested)         {             // 执行任务         }     }, token); }  public void StopThread() {     _cts.Cancel(); } 
  1. 使用ManualResetEventAutoResetEvent
private ManualResetEvent _stopEvent;  public void StartThread() {     _stopEvent = new ManualResetEvent(false);      ThreadPool.QueueUserWorkItem(_ =>     {         while (!_stopEvent.WaitOne(0))         {             // 执行任务         }     }); }  public void StopThread() {     _stopEvent.Set(); } 

在这些示例中,我们使用了不同的方法来通知线程何时应该停止。这些方法比直接调用Thread.Abort()更加优雅,因为它们允许线程在适当的时候自然地停止,从而避免了资源泄漏和其他问题。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!