2013-11-14 2 views
1

Я пробовал в другом месте, но ничего не вышло. В основном я хочу, чтобы изображение отображалось в окне изображения.UI зависает на разных потоках

Мой код:

Dim ScreenReceiverClient As New TcpClient 
Dim ScreenReceiverServer As New TcpListener(ScreenReceiverPort) 
Dim ScreenReceiverListening As New Thread(AddressOf ScreenListen) 
Dim GetScreen As New Thread(AddressOf ReceiveScreen) 
Private Sub ReceiveScreen() 
    While ScreenReceiverClient.Connected = True 
     Call New Action(AddressOf ChangeImage).BeginInvoke(Nothing, Nothing) 
    End While 
End Sub 
Private Sub ChangeImage() 
    Dim bf As New BinaryFormatter 
    PictureBox1.Image = bf.Deserialize(ScreenReceiverClient.GetStream) 
End Sub 
Private Sub ScreenListen() 
    While ScreenReceiverClient.Connected = False 
     ScreenReceiverServer.Start() 
     ScreenReceiverClient = ScreenReceiverServer.AcceptTcpClient 
    End While 
    GetScreen.Start() 
End Sub 

ChangeImage() должен быть вызван на UI потоке вместо нити ScreenReceiverListening, но интерфейс просто замерзает. Пожалуйста, помогите мне!

ответ

0

Вам необходимо вызвать метод асинхронно:

http://msdn.microsoft.com/de-de/library/2e08f6yc(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Еще один простой способ, чтобы использовать таймер:

Private Sub ScreenListen() 
     While ScreenReceiverClient.Connected = False 
      ScreenReceiverServer.Start() 
      ScreenReceiverClient = ScreenReceiverServer.AcceptTcpClient 
     End While 

     t1.Interval = 1 
     t1.Start() 
    End Sub 

    Private WithEvents t1 As Windows.Forms.Timer 

    Private Sub t1_Tick(sender As Object, e As EventArgs) Handles t1.Tick 
     t1.Stop() 
     ReceiveScreen() 
    End Sub 
Смежные вопросы