2015-05-23 2 views
-4

Я работаю над проектом, для которого требуется отдельная форма, на которой работает поток сервера, для доступа и изменения местоположения управления другими формами. Я знаю, как вызвать элемент управления из другого потока, работающего в той же форме, но я не уверен, как это сделать в отдельной форме и потоке.VB.net Перекрестная форма вызова для сквозных потоков?

+0

Не видя какого-то кода, было бы трудно сказать. – OneFineDay

+0

Я запускаю UdpClient в отдельном потоке, который запущен в форме с именем Server, я хочу сказать, изменить название формы 'Main' из отдельного потока в форме с именем Server. – Orion

+1

Форма сервера может поднять событие, которое прослушивает Main. Вам нужно будет делегировать работу обратно в поток пользовательского интерфейса. – OneFineDay

ответ

2

Вот простой пример ...

Определить событие в вашей форме сервера и поднять его при необходимости:

Public Class frmServer 

    Public Event NewPosition(ByVal pt As Point) 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     ' ... in response to something (probably not a button click!) ... 
     Dim x As Integer = 250 
     Dim y As Integer = 100 
     RaiseEvent NewPosition(New Point(x, y)) 
    End Sub 

End Class 

В главной форме, подписаться на это событие при создании экземпляра формы сервера. Это можно сделать с помощью инструкции AddHandler и ключевого слова AddressOf. Затем сделайте нормальный рисунок Invoke, чтобы убедиться, что он работает в правильной нити пользовательского интерфейса:

Public Class frmMain 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim server As New frmServer 
     AddHandler server.NewPosition, AddressOf server_NewPosition 
     server.Show() 
    End Sub 

    Private Delegate Sub dlgNewPosition(ByVal pt As Point) 

    Private Sub server_NewPosition(pt As Point) 
     If Me.InvokeRequired Then 
      Me.Invoke(New dlgNewPosition(AddressOf server_NewPosition), New Object() {pt}) 
     Else 
      Me.Location = pt 
     End If 
    End Sub 

End Class 
+0

Большое спасибо, это решило мою проблему! – Orion

Смежные вопросы