OnIdle事件引发的窗口无法响应消息的问题
本人用ApplicationEvents的控件里的OnIdle事件,写了一段代码,
本意是要用程序的空闲来执行一部分功能。
由于这部分功能会花大量的时间(要几十秒不等)
此时问题就出来,在OnIdle期间,程序里用ShowModal()显示的子窗口不会响应消息,可以Show,但Show后,该窗口上按键或关闭等功能均暂时失效。
必须等到OnIdle里的代码处理完成后,才可能响应消息,不知为何?要如何解决
void __fastcall TForm1::ApplicationEvents1Idle(TObject *Sender, bool &Done)
{
//添加代码,要执行几十秒的时间
}
//---------------------------------------
[解决办法]
首先尽量不要在这个事件中执行耗时太久的代码,其次在代码适当的位置加入一个或多个:
Application->ProcessMessages();
[解决办法]
这么耗时的数据处理你还用OnIdle事件处理,你是着急还是不着急呀,呵呵。在这个事件里面用添加Application->ProcessMessages();
试试。个人觉得还不如用线程除了