VB.NET程序界面假死如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.NET程序界面假死如何解决相关的知识,希望对你有一定的参考价值。

我的程序需要做访问网络的耗时操作,运行时出现界面假死的现象,使用了多线程之后还是如此,请问如何解决这个问题?使用多线程时是通过委托Invoke访问界面的控件,一边获取网络数据,一边更新界面内容。请问如果多线程运行时不访问界面控件是不是就不会出现界面假死的现象?

Code开始////////////////////////////////////////

’建立托管
Delegate Sub Tuo()

’托管(Th为待托管事件)
Private Sub TuoCenter()
Me.Invoke(New Tuo(AddressOf Th))
End Sub

‘建立线程
Dim thread1 As Thread = New System.Threading.Thread(AddressOf TuoCenter)
’启动线程
thread1.Start()
[Code]结束////////////////////////////////////////

我想到一种方法:把控件数据读取到变量,这样在多线程运行时,线程就不用访问控件,然后获取网络数据到变量,结束线程时再把数据显示到界面,不知道可不可行?有没有更好的方法解决界面假死问题?

参考技术A 在Th过程中加入 Threading.Thread.Sleep(1)可以解决假死追问

不行。我这个是耗时操作,使用睡眠也得等访问网络数据结束后才能Sleep,根本没有用。

追答

今天看到篇文章,估计对你有用
“在vb.net中运用多线程实现远程数据收集”
链接:http://www.bianceng.cn/Programming/VB_NET/201001/14675.htm

参考技术B Application.DoEvents()追问

这个刷新操作在耗时程序执行完之后才会执行,不能解决问题。

本回答被提问者采纳

C#多线程实现循环。界面会假死怎么办?

如题,我建立了几个线程。里面的方法都是while(true)...Thread.sleep(1)这样的,sleep的值我不想弄太大,这样获取的信息就不是我想要的。但是这样程序运行的时候,界面会有假死的现象,应该如何解决呢

参考技术A this.Refresh();

以上是关于VB.NET程序界面假死如何解决的主要内容,如果未能解决你的问题,请参考以下文章

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

如何解决 VB.NET 1.1 应用程序的性能下降?

如何解决 vb.net 应用程序中的 mysql 定义错误?

C#多线程实现循环。界面会假死怎么办?

问题解决系列:遇到tomcat的假死问题,如何排查问题

如何解决 vb.net 中的这个 SQL 语法错误?