我有一个Windows窗体应用程序,我在表单的构造函数中添加mainloop,如下所示:
Application.Idle += new EventHandler(Update);
工作正常 - 但是,当我最小化应用程序窗口时,不会调用我的更新函数。在窗口最小化时,我还需要做什么才能调用我的更新函数?
答案 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事件,并在处理程序中,检查表单是否最小化...