Работа с формами при многопоточности
От: Петров Иван Сергеевич http://wanes101.16mb.com/my_site/main.php
Дата: 04.07.13 15:24
Оценка:
Здравствуйте я работаю на vb10
Как известно работать с формой можно только в потоке где она была создана и поэтом, как сказано надо использовать метод invoke нужной формы для запуска делегатов в потоке формы. читал тут http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=RU-RU&k=k(EHINVALIDOPERATION.WINFORMS.ILLEGALCROSSTHREADCALL);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV3.5%22);k(DevLang-VB)&rd=true

Не могу понять этот код:
Private Sub setTextSafeBtn_Click( _
ByVal sender As Object, _
ByVal e As EventArgs) Handles setTextSafeBtn.Click

Me.demoThread = New Thread( _
New ThreadStart(AddressOf Me.ThreadProcSafe))

Me.demoThread.Start()
End Sub

Private Sub ThreadProcSafe()
Me.SetText("This text was set safely.")
End Sub

Private Sub SetText(ByVal [text] As String)

If Me.textBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.textBox1.Text = [text]
End If
End Sub

То что жирным от куда этот тип ведь он декларирован, но я так понимаю это делегат ?
И его нужно декларировать так:
public delegate sub SetTextCallback(Text as String)?

Но у меня это не сработало вот мой код :
Public Delegate Sub D1()

Public Sub EventTimeRefresh()
If Form1.InvokeRequired Then
Dim d As New D1(AddressOf EventTimeRefresh)
Form1.Invoke(d)
Else
'дальше работа с формой
.........................
End If
End If

End Sub
Помогите пожалуйста
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.