代码改变世界

.net 多线程

2016-01-26 16:41  后悔药  阅读(108)  评论(0)    收藏  举报

Dim TargetName As String = Hashtotext(getcrc32(".\abc.txt"))
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Me.Label1.Text = TargetName
End Sub
到了Label1赋值的时候,VS2010说:线程间操作无效: 从不是创建控件“Label1”的线程访问它。怎么解决?

回答:

通过Label1的Invoke方法在创建Label1的线程上改变Label1.Text属性
在Sub BackgroundWorker1_DoWork 中调用Label1.Invoke:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Label1.Invoke(Sub() Label1.Text = TargetName)
End Sub
Control.Invoke 方法:http://msdn.microsoft.com/zh-cn/library/zyzhdc6b.aspx