求助一下:关于等待非模式对话框确认的方法
我的系统原先启动是:
1. 显示扉页
2. 显示模式登录对话框,等待用户确定
3. 初始化主画面(需要10秒至20秒钟)
4. 显示主画面
由于初始化主画面的时间太长,用户都以为是启动不起来了。
于是我想修改为:
1. 显示扉页
2. 显示非模式登录对话框, 程序继续运行不等待
3. 初始化主画面
4. 用任意方法捕获用户登录对话框是否确定或取消了。
如果用户未确定或取消,就等待用户输入。
5. 显示主画面。
第2步自然只要把 ShowModal 改成 Show 就可以了。
但第4步就不行了。
我试了 TThreadList::LockList, CRITICAL_SECTION, CreateEvent
都不行。
请教大家谁有比较好的经验共享一下,谢谢。
[解决办法]
主窗体的初始化理论上来说是不慢的,慢的是其他的操作,把那些慢的操作提取出来单独调用就行了。
[解决办法]
还是用ShowModal 吧,在Modal界面上想办法吧,加个动画,或者时间进度,表示没有死机
[解决办法]
1. 显示扉页
2. 初始化主画面(需要10秒至20秒钟) 加上进度条。或者操作状态。
3. 关闭扉页
4. 显示模式登录对话框,等待用户确定
5. 显示主画面
[解决办法]
估计加个进度条比较可取。要是改程序。程序大的话,难。
[解决办法]
没看出你多线程来?你TThreadList::LockList, CRITICAL_SECTION, CreateEvent干什么?反正都是主线程,直接设置一个变量保存就可以了。
[解决办法]
方法一、窗口类加一个公用变量标志,在登录框的OnClose事件中修改变量值,建Timer,把第四步和第五部放在timer事件中,但要加入判断,当标志被修改过,就执行第四步和第五步,同时关闭Timer
方法二、另开线程,情况比较复杂
不可能在主线程中,同一个函数体内完成你的全部五步,因为如果你在执行第四步时,用任何方式等待,都会造成主线程阻塞,导致你的登录框失去反应。