如何在另一个类的线程中更新界面

homaster 2008-05-27 05:28:19
示例代码如下:
Public Class Form4
Public Delegate Sub UpdateUI()
Dim wkThread2 As Threading.Thread
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
wkThread = New Threading.Thread(AddressOf setUI)
wkThread.IsBackground = True
wkThread.Name = "AAA"
wkThread.Start()
End Sub
Public Sub setUI()
Dim i As Int16
For i = 0 To 10000
If i = 5555 Then
'Dim xxx As New UpdateUI(AddressOf aaaa)
'xxx()
aaaa()
End If
Next
End Sub
Public Sub aaaa()
If Me.InvokeRequired Then '为什么此处返回都是false呢?
Me.Invoke(New UpdateUI(AddressOf aaaa))
Else
Label1.Text = "Stop"
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim cls1 As New Class1
cls1.workh()
End Sub
End Class

另一个类Class1:
Public Class Class1
Public wkThread As Threading.Thread
Public Sub workh()
wkThread = New Threading.Thread(AddressOf setUI)
wkThread.IsBackground = True
wkThread.Name = "AAA"
wkThread.Start()
End Sub
Public Shared Sub setUI()
Dim i As Int16
For i = 0 To 10000
If i = 5555 Then
'以下3种方法都不行
'Dim xxx As New Form4.UpdateUI(AddressOf Form4.aaaa)
'xxx.Invoke()
Form4.aaaa()
'Form4.Invoke(New MethodInvoker(AddressOf Form4.aaaa))
End If
Next

End Sub
End Class

请教各位,为什么同样的代码,在窗体里的线程更新UI能正确执行(Button1_Click),但是放在另外一个类(Class1)中就不能执行呢?(Button3_Click界面Label1没有更新)
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AManStudio 2008-05-28
  • 打赏
  • 举报
回复
楼主请参考下控件的 委托管理
homaster 2008-05-27
  • 打赏
  • 举报
回复
我用的是VS2005.
我修改了Class1.将Class1的 wkThread = New Threading.Thread(AddressOf setUI) 修改为 wkThread = New Threading.Thread(AddressOf Form4.aaaa)就可以执行得到正确更新结果。不知道是何原因?

清晨曦月 元老 2008-05-27
  • 打赏
  • 举报
回复
你用的.NET版本是2003吗,2003的话就是你的代码有问题。2005以后的版本对不同线程创建的UI之间的操作进行了限制,
1、你可以用代码去掉这种限制,
2、另外一种方法是在一个线程中激活事件,而在另一个线程中进行处理,这样就可以了

例如,在A线程中有一个窗体,你要激活它的but1_click,则在线程B中定义一个事件E:在需要调用but1_click时,激活线程B的E事件,而E的处理代码位于线程A,处理代码类似:
sub e () handle B.E
but1_click
end sub

homaster 2008-05-27
  • 打赏
  • 举报
回复
帮帮忙吧,各位。

16,720

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧