【问题标题】:Windows Show Desktop causes WinForms elements to stop updatingWindows Show Desktop 导致 WinForms 元素停止更新
【发布时间】:2021-12-26 01:57:14
【问题描述】:

是否有一种简单的方法可以让表单上的元素在我单击 Windows 显示桌面后仍保持更新?以下代码更新 textBox1 中的值,直到我单击 Windows 显示桌面(Windows 10 - 单击屏幕右下角)。我不喜欢使用Application.DoEvents()

void Button1Click(object sender, EventArgs e)
{
    int n = 0;
    while(true) {
        textBox1.Text = n++.ToString();
        textBox1.Refresh();
        Update();
        // Application.DoEvents();
        Thread.Sleep(200);
    }
}

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    使用Thread.Sleep阻塞当前线程(UI线程);你可以这样修复它:

    private async void button1_Click(object sender, EventArgs e)
    {
        int n = 0;
        while (true)
        {
            textBox1.Text = n++.ToString();
            await Task.Delay(200);
        }
    }
    

    【讨论】:

    • 谢谢,代码有效。如果我决定一起删除 Task.Delay(),我怎样才能让表单更新?
    • 我不清楚为什么在您单击显示桌面后 UI 完全冻结;即使您删除了 Thread.Sleep,它也会发生。但在我分享的代码中,Task.Delay 给了 UI 线程一些时间来处理其余消息,而不会阻塞 UI 线程。
    • 如果你想知道它是否比 Application.DoEvents 更好,答案是Yes, of course
    • 谢谢礼萨。我也更喜欢使用 Task.Delay() 来引入微小的延迟(并使 UI 响应)而不是使用 Application.DoEvents()。
    猜你喜欢
    • 1970-01-01
    • 2014-12-11
    • 2015-03-29
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多