C# 如何停止在后台运行的第二个线程
我创建了一个应用程序,每次下载一个文件。我使用了一种方法,该方法使用while循环运行异步任务,直到用户发出某个信号打破循环(标志)。我可以随时停止循环,但我注意到第二个线程仍然在后台运行(我相信)。我的结论来自Visual Studio,它显示输出的频率与我给任务的X时间一样。延迟(X):C# 如何停止在后台运行的第二个线程,c#,asynchronous,dispatcher,C#,Asynchronous,Dispatcher,我创建了一个应用程序,每次下载一个文件。我使用了一种方法,该方法使用while循环运行异步任务,直到用户发出某个信号打破循环(标志)。我可以随时停止循环,但我注意到第二个线程仍然在后台运行(我相信)。我的结论来自Visual Studio,它显示输出的频率与我给任务的X时间一样。延迟(X): 线程0x8644已退出,代码为0(0x0) 线程0x7254已退出,代码为0(0x0) 线程0x9a14已退出,代码为0(0x0) 线程0x7558已退出,代码为0(0x0) 这是在循环停止之后。我分析
- 线程0x8644已退出,代码为0(0x0)李>
- 线程0x7254已退出,代码为0(0x0)李>
- 线程0x9a14已退出,代码为0(0x0)李>
- 线程0x7558已退出,代码为0(0x0)
// Task that runs every 2 seconds
public void Checker()
{
Task.Run(async () =>
{
while (true)
{
if (Flag)
{
Dispatcher.Thread.Suspend(); // This did not work, but you get the idea
break;
}
Dispatcher.Invoke(() =>
{
// Do something in the UI thread
});
await Task.Delay(2000);
}
});
}
检查
Thread.Suspend()
中的取消令牌是过时的methodEldar,感谢您为我指明了正确的方向。如果您使用CancellationToken
,您可以设置IsCancellationRequested
,如Eldar所述。随着工作负载的变化,线程池会自动调整线程的数量,这是很自然的。你真的有问题吗?或者你只是觉得你可能有问题,因为这些信息?