最小化时Windows窗体应用程序更新

时间:2009-11-27 17:13:03

标签: c# winforms minimized

我有一个Windows窗体应用程序,我在表单的构造函数中添加mainloop,如下所示:

Application.Idle += new EventHandler(Update);

工作正常 - 但是,当我最小化应用程序窗口时,不会调用我的更新函数。在窗口最小化时,我还需要做什么才能调用我的更新函数?

3 个答案:

答案 0 :(得分:3)

您可以从System.Threading.Timer中调用它。在最小化时启动Timer或者让它运行(低频)并在调用Update之前测试Minimized。

根据评论进行编辑

最明智的方法是从另一个线程运行Update代码。空闲事件或定时器解决方案都会遇到问题。

但是使用线程时,在触摸任何UI控件时都必须小心。一个简单的方法是BackgroundWorker。它具有已执行线程安全的Completed和Progress事件。

答案 1 :(得分:1)

您可以像Henk建议的那样使用计时器,但只需添加一个标志,表示该方法仍在处理。

因此,设置一个50毫秒的延迟时间,并像这样编码事件处理程序:

private void timer1_Tick(object sender, EventArgs e)
{
    if ((this.WindowState == FormWindowState.Minimized) && !_isProcessing)
    {
        _isProcessing = true;

        // Do stuff

        _isProcessing = false;
    }
}

其中_isProcessing是表单上的私有布尔变量。

如果您希望每个操作的时间少于50毫秒,那么以某种方式聚合操作(可能是一个合适的队列)。

答案 2 :(得分:0)

我必须尝试这一点以确定,但我的第一个猜测是连接表格Resize事件,并在处理程序中,检查表单是否最小化...