您的位置:首页 > 编程语言 > VB

[VB.NET]form初始化事件的解决方法,高手请进...

2008-12-29 22:17 399 查看



<script type="text/javascript"><!--
google_ad_client = "pub-8333940862668978";
/* 728x90, 创建于 08-11-30 */
google_ad_slot = "4485230109";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

form初始化事件的解决方法,高手请进...
之前我在一个窗体初始化的时候加载一幅地图,因为地图很大,所以等好久窗体才出来,现在我想先把窗体show出来再加载地图,有办法作到吗?在vb.net里是不是有show之后的事件?请高手指教,谢谢!
__________________________________________________________________________
接分,顶
__________________________________________________________________________
我也顶下,vs2003没有shown事件...可我用的是vs2003...
__________________________________________________________________________
急了,在线等...
__________________________________________________________________________
在 form 的load事件中,先
me.show
然后再加载地图
或者用多线程
__________________________________________________________________________
楼上说的是!但me.show效果可能不会太好,继续加油哦!
__________________________________________________________________________
学习...
__________________________________________________________________________
以前看过一本教程,上面说可以写几个线程,将FORM的加载和地图的加载隔离开来,但是它上面没有给出例子。

等待楼下的正解...........
__________________________________________________________________________
Imports System.Threading
...
...

Form_Load()
...
...
me.show()

Dim thLoadMap as Thread = new Thread( AddressOf funcLoadMap )
thLoadMap.Start()
end sub

private sub thLoadMap()
Loading~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end sub
__________________________________________________________________________
pslh(pslh) 的第一种方法早就试过,窗体刷的显下就没了,肯定不行,其实用线程的方法我已经实现了,但是占了很大的cpu使用率,希望楼下的能给我一个其它方法,同时也感谢楼上,结帖子时加分...
__________________________________________________________________________
难道,你装载的时候占用时间和cpu的分配不正式空间度和时间度的问题么?
__________________________________________________________________________
其实加载几副地图,用线程我怕不稳定,其实感觉这种情况也没必要用线程,肯定有其它的方式...
__________________________________________________________________________
那用Form的Activated事件试试吧,不过要做 IsLoaded 判断,如果 Load 过了,就不要重新再Load 了,因为这个事件会在窗体显示的时候激发(隐藏、最小化后再显示也一样)

Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated
__________________________________________________________________________
我觉得还是线程好一些。线程不会让你感觉程序假死在那里,线程锁来保证你的稳定不就可以了?
__________________________________________________________________________
试试doevents
__________________________________________________________________________
另外写一个加载的方法,然后调用之前DoEvents
__________________________________________________________________________
楼主说道:

之前我在一个窗体初始化的时候加载一幅地图,因为地图很大,所以等好久窗体才出来,现在我想先把窗体show出来再加载地图,有办法作到吗?在vb.net里是不是有show之后的事件?请高手指教,谢谢!
--------------------

对于这种情况,我的做法是Form_Load的时候打开一个Timer,定时3秒,Timer超时的时候去做费劲的工作。

当然,这只能解决窗体第一次显示不刷新的问题。
当费劲工作开始执行时,窗体仍然会延迟响应。
要彻底解决UI的慢反应,只能使用另一个后台工作者线程。
__________________________________________________________________________
要不整个读数据的进度条 呵呵
__________________________________________________________________________
GGDFGFGFGF
__________________________________________________________________________
添加一个Timer(或是Thread),Form_Load事件中启动Timer,Timer的时间设的短些(如20),在线程中进行加载图。
这样读取是在其他线程中进行的,不会卡到Form线程。
__________________________________________________________________________
不建议用Theard,试试BackgroudWorker组件
__________________________________________________________________________
关注中
__________________________________________________________________________
只能说帖子的生命力好强呀!
__________________________________________________________________________
地图=图片?

预先将地图切割成适当大小的 n*m 块(以可以快速载入为准),初始显示时只要载入左上角的几块。
拖动滚动条时很容易算出需要显示的是哪几块,尚未载入的就载入,已载入的就用现成的,除非物理内存消耗得太厉害,否则无论多大得地图速度都慢。
__________________________________________________________________________
少打字了:否则无论多大得地图速度都不慢
__________________________________________________________________________
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息