大家好!
我想知道如果可能的话,使主线程继续当第二个线程完成,而无需使用睡眠和,而cicles等待值。
我tryed激活一个处理,但处理程序执行的代码执行辅助线程和可能出现的错误,从跨线程操作可以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 |会员