vb.net多线程,循环导致窗口界面假死的问题

程序中有一个ProgressBar定义有变量:DimiasintegerDelegateSubdeSomeSub()DimTAsSystem.Threading.Thre... 程序中有一个ProgressBar
定义有变量:
Dim i as integer
Delegate Sub deSomeSub()
Dim T As System.Threading.Thread
过程:
Sub SomeSub()
For i = 0 To ListView1.Items.Count - 1
Dim b As Bitmap = Bitmap.FromFile("文件路径")
Dim a As Bitmap = ZommPictureto480(b)
a.Save("存储路径", System.Drawing.Imaging.ImageFormat.Jpeg)
b.Dispose()
a.Dispose()
ProgressBar.PerformStep()
Next
End Sub

Sub BeginDoSub()
Dim s As New deSomeSub(AddressOf SomeSub)
Me.Invoke(s)
End Sub

Button点击事件:
Sub Click
ProgressBar.Maximum = ListView1.Items.Count
T = New Threading.Thread(New Threading.ThreadStart(AddressOf SomeSub))
T.Start()
End Sub

'---------------------------------------------------------------
上面程序在执行的时候一旦ListView中的项目很多,进行多次循环的时候(大概在100次左右)就会使窗口界面假死,无法进行操作,但是程序仍然是在运行中。不知道有哪位知道这是什么问题吗?
Button点击事件中应该是:
T = New Threading.Thread(New Threading.ThreadStart(AddressOf BeginDoSub))

本来就是要运行速度最快,还设置停顿?
展开
 我来答
FantasyChump
2009-02-26 · TA获得超过3287个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2227万
展开全部
同学。。你这里的写法其实根本没有用到多线程
原因很简单
你是定义了一个T的新线程,但是很可惜你在BeginDoSub这个独立的线程中又定义了一个deSomeSub的委托,并且直接用Me.Invoke把实际的执行任务提交给界面主线程运行了
所以你的图片的处理函数实际上是在主线程中运行的,新线程等于没用

正确的作法是,T定义为SomeSub这个函数为入口的线程,并启动它
在界面进度条更改的时候再使用Invoke来调用委托来进行界面更改。

自己再好好看看吧,时间问题我要走了。
食品中化学扫盲
2009-02-26 · TA获得超过230个赞
知道小有建树答主
回答量:365
采纳率:0%
帮助的人:272万
展开全部
设置下 线程 的停顿时间

线程 很多快速的运行是否会导致窗口界面假死呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式