【发布时间】:2017-09-30 10:53:04
【问题描述】:
我在我的 WinForm 应用程序中启动了一些异步无限循环,但每次我试图摆脱它们时,程序都会挂起。我读过一些类似的主题,人们建议使用 CancellationTokens,但我无法根据我的需要调整它们。这是我的代码的相关部分。
static bool processStop = false;
static bool processStopped = false;
//Called once
private async void ProcessData()
{
while (!processStop)
{
await Task.Run
(
() =>
{
//Do stuff and call regular not async methods
}
);
}
processStopped = true;
}
//Button click handler to exit WinForm
btnExit.Click += (senders, args) =>
{
processStop = true;
//Programm hangs up here
while (!processStopped);
FormMain.Close();
}
修改了代码
变量是静态的。
Close 方法是 Forms 的默认 Close() 方法。
【问题讨论】:
-
我不认为问题是由您显示的代码引起的,如果您能向我们展示 Close 方法的代码就更好了。
-
这个代码好像也适应不了,怎么不问怎么用cancel token呢?
-
@AbdullahDibas 编辑代码使其更清晰。
-
@Crowcoder 因为我现在正在研究多任务处理,所以我不确定 CancellationTokens 是否是解决我的问题的最佳答案。另外我还不熟悉 CancellationTokens,所以我要求一个更一般的答案。如果可能的话。
-
试试
await Task.Run(() =>{...}).ConfigureAwait(false);
标签: c# winforms loops asynchronous exit