我正在开发Winforms C#.net应用程序。
public partial class FormMain : Form
{
private bool cancelQueryWaitRequested = false;
public FormMain()
{
InitializeComponent();
}
private async void btnQueueStart_Click(object sender, EventArgs e)
{
QueryFinishedWait();
}
private int QueryFinishedWait()
{
int i = 1;
reQueueUIStart();
groupWaitQueue.Visible = true;
for (i = 0; i < 20; i++)
{
lblQueueWaitSeconds.Text = (20 - i).ToString();
Thread.Sleep(1000);
if (cancelQueryWaitRequested)
break;
}
groupWaitQueue.Visible = false;
reQueueUIStop();
return i;
}
}
当我执行此操作时,应用程序进入&#34;没有响应&#34;我可以看到处理器的使用率非常高。
但是当我在btnQueueStart_Click
内运行相同的循环时,它可以正常工作。
我知道我做错了什么,仍然无法解决问题。
提前致谢。
答案 0 :(得分:1)
但是当我在btnQueueStart_Click中运行相同的循环时,它可以正常工作。
那是因为事件处理程序是异步的,但是在调用方法时会破坏它。
private async void btnQueueStart_Click(object sender, EventArgs e)
{
//QueryFinishedWait();
await QueryFinishedWait();
}
async private Task<int> QueryFinishedWait()
{
... // await something
}
但似乎你错过了另一块异步谜题。请注意,不建议等待Sleep()
。