C# Winforms卡住并进入“无响应”状态

本文关键字:响应 无响应 状态 Winforms | 更新日期: 2023-09-27 18:31:33

我正在开发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;
    }
 }

当我执行此操作时,应用程序变为"无响应",我可以看到处理器使用率非常高。

但是当我在btnQueueStart_Click内运行相同的循环时,它可以正常工作。

我知道我做错了什么,仍然想不通是什么。

提前谢谢。

C# Winforms卡住并进入“无响应”状态

但是当我在btnQueueStart_Click内运行相同的循环时,它可以正常工作。

这是因为事件处理程序是异步的,但在调用方法时会破坏它。

private async void btnQueueStart_Click(object sender, EventArgs e)
{
    //QueryFinishedWait();
    await QueryFinishedWait();
}
async private Task<int> QueryFinishedWait()
{
    ... // await something
}

但似乎你错过了异步拼图的另一块。请注意,不建议与Sleep()一起等待。