2012-08-15 62 views
1

我已经搜索了该网站并找到了类似的主题,但是我的问题是解释/解决方案目前超出了我的技术理解范围。使用后台工作者(VB.NET)更新控件

我只注意到Visual Studio中的“后台工作者”,我正在使用它来登录到我的数据库并保持UI功能(GIF图像显示加载等)。我有

问题是,一旦登录完成我更新标签说“登录完成”等

我得到一个错误“跨线程操作无效”

如果可能的话,有人可以告诉我一种方法,我可以通过后台工作人员更新控件,或提供一个我可以用作资源的源?

我从来没有使用多线程之前,我明白问题的原因,但我没有看到如何解决它。

谢谢你的时间!

汤姆

+0

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx#Y2497 – 2012-08-15 17:59:03

回答

1

你必须更新你在为ProgressChangedRunWorkerCompleted事件BackgroundWorker事件处理程序的显示。这将消除您遇到的交叉线程问题。

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, _ 
ByVal e As RunWorkerCompletedEventArgs) Handles backgroundWorker1.RunWorkerCompleted 
    If e.Cancelled = True Then 
     resultLabel.Text = "Canceled!" 
    ElseIf e.Error IsNot Nothing Then 
     resultLabel.Text = "Error: " & e.Error.Message 
    Else 
     resultLabel.Text = "Done!" 
    End If 
End Sub 

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx#Y2497

+0

谢谢,我试图改变进度的方法,但这似乎只适用于进度控制我猜测为它要求一个百分比。就像你和Larstech建议的那样,runworker事件似乎对我很有用。我正在用值更新一个变量,并且在RunWorkerCompleted上,我将值赋给控件。感谢您的帮助! – 2012-08-15 18:07:55