首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于启动窗体假死的有关问题

2013-07-04 
关于启动窗体假死的问题我想在程序主窗体中实现“水波特效”,我已经从网上找到了封装好的DLL可是使用。可是,

关于启动窗体假死的问题
我想在程序主窗体中实现“水波特效”,我已经从网上找到了封装好的DLL可是使用。
可是,如果实现水波特效的背景图片尺寸稍大时,DLL的初始化将需要一段时间。(在我的调试工程里大概需要10秒)。
于是,我希望建立一个启动窗体,当DLL初始化时,在前台做一些类似滚动条的动画,不至于让用于觉得程序停止响应了。
该DLL初始化具体是这样的:

Dim Pic As StdPicture
Set Pic = LoadPicture(App.Path & "\BackMain.jpg")
WaterInit Pic.handle
Set Pic = Nothing

当执行到WaterInit Pic.handle这一句时,原来启动窗体类似滚动条的动画同样会出现“假死”。

可能我的表述有点复杂,大家运行一下我的调试工程就能看到效果了。

调试工程下载地址:http://dl.vmall.com/c0fom2kkbk

所以,我希望在执行WaterInit Pic.handle时,启动窗体可以正常显示动画。

我曾经尝试过多线程,可是可能由于小弟我水平有限,都失败了关于启动窗体假死的有关问题

还望各位大神不吝赐教!关于启动窗体假死的有关问题


[解决办法]
...
Me.Show
DoEvents
虽然不能避免假死,但是可以把界面给刷出来。

事实上,如果你找一个很破很破的计算机(PII 266或者以下),启动VB6.0,VB6.0自己都会假死。
[解决办法]

引用:
Quote: 引用:

关键在于这个WaterInit, 也不知道你处理了什么, 处理时间太长, 然后就造成界面假死.

你可以尝试将这个过程分拆开成多个小的过程, 然后用一个进度条来显示, 就不会造成假死的现象了.


关键是WaterInit是调用别人封装的DLL,我不知道他内部怎么实现的,如果我知道WaterInit的内部实现就不存在类似假死的问题了。


那唯一的办法就是你代码实现一个一样功能的替代掉这个函数了
[解决办法]
还有一种方法是在ActiveX Exe中使用Timer和事件,这样可以直接显示主工程中的窗体,不过这种方式我没试过,不知道是否仍然会假死。
我只试过上边一种方法:
Project2 (ActiveX EXE)
  +-启动窗体
  +-Class1

MainProject:
引用Project2
调用Class1的Show过程。
执行WaterInit Pic.handle
调用Class1的Hide过程。

热点排行