在C#中,盡量避免使用Thread.Abort()
方法來終止線程,因為這可能導致資源泄漏和其他不可預測的問題
private volatile bool _stopRequested;
public void StopThread()
{
_stopRequested = true;
}
public void MyThreadMethod()
{
while (!_stopRequested)
{
// 執行任務
}
}
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();
}
ManualResetEvent
或AutoResetEvent
:private ManualResetEvent _stopEvent;
public void StartThread()
{
_stopEvent = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(_ =>
{
while (!_stopEvent.WaitOne(0))
{
// 執行任務
}
});
}
public void StopThread()
{
_stopEvent.Set();
}
在這些示例中,我們使用了不同的方法來通知線程何時應該停止。這些方法比直接調用Thread.Abort()
更加優雅,因為它們允許線程在適當的時候自然地停止,從而避免了資源泄漏和其他問題。