【发布时间】:2015-11-14 03:56:13
【问题描述】:
我想做一个快速的不可关闭的模态对话框,在执行某些任务时弹出,并在任务完成后消失。
存在一些固有的困难:
- 不要阻塞主 UI 线程;
- 不要离开系统幽灵窗口;
- 将任务移动到单独的线程中运行;
- 允许向用户更新等待消息;
- 处理从线程到应用程序的异常;
- 在对话框中显示动画 GIF;
如何绕过这些陷阱?
下面是我如何使用它的实际示例:
TWaiting.Start('Waiting, loading something...');
try
Sleep(2000);
TWaiting.Update('Making something slow...');
Sleep(2000);
TWaiting.Update('Making something different...');
Sleep(2000);
finally
TWaiting.Finish;
end;
【问题讨论】:
-
Sleep(2000)是问题所在。不要阻塞主 UI 线程。您需要将长时间运行的任务移到单独的线程中。 -
好的,我明白了,但是将我正在运行的任务移到一个单独的线程中可能很难...有办法让 TWaiting 运行到一个单独的线程中吗?
-
没有。那样不行。您需要停止阻塞 UI 线程。那是你的问题。
-
也许这听起来很菜鸟问题,但是,
TWaiting使用CreateWindow()(WinAPI) 来创建对话框和控件,而不是使用 VCL。可能有用吗? -
可以的。
标签: delphi gif animated-gif