返回首页

大家好!

我想知道如果可能的话,使主线程继续当第二个线程完成,而无需使用睡眠和,而cicles等待值。

我trye​​d激活一个处理,但处理程序执行的代码执行辅助线程和可能出现的错误,从跨线程操作可以occurr。

为最大限度地减少这种类型的错误和代码,以防止,我现在有一个计时器,检查这些变量改变每200ms,并启动相应的代码,但我whant找到一种方法,不使用CPU为可避免cicles的。{BR }
我已经tryed BackgroundWorkers,但background.runworkercomplete也将给予跨线程操作错误。

例如:我有一个子例程,我想获取一些价值,有一个处理程序,把一个标签,值时充满变数

一个辅助线程,处理程序,或由一个BackgroundWorker执行由辅助线程或由backgroudworker总是给我跨线程错误。

我准备2010年在VB简单的例子,一个文本框和两个按钮,总是给我这个错误的一种形式。我想要做的是文本框进行更新主线程,而不是收到错误。
&# 160;
例如:

Public Class Form1

      Private WithEvents aa As New testess

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            BackgroundWorker1.RunWorkerAsync()

      End Sub

      Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

            aa.str1 = "rthrghfghfg"

      End Sub

      Private Sub backgroundworkercomplete(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

            TextBox1.Text = aa.str1

      End Sub

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Dim thread As New System.Threading.Thread(AddressOf teste)

            thread.IsBackground = True

            thread.Start()

      End Sub

      Private Sub teste()

            aa.str1 = "rthrghfghfg"

      End Sub

      Private Sub testesfim(ByVal val As String) Handles aa.testes

            TextBox1.Text = aa.str1

      End Sub

End Class

Class testess

      Private str As String

      Public Event testes(ByVal val As String)

      Property str1 As String

            Get

                  str1 = str

            End Get

            Set(ByVal value As String)

                  str = value

                  RaiseEvent testes(str)

            End Set

      End Property

End Class

谢谢。

弗拉维奥 :7835126 |会员

回答

评论会员: 时间:2