2012-06-22 53 views
1

TcpClient DataReadAsyncCallback是否在主UI線程中執行? 我從那個處理程序創建窗體,並且幾次調用和窗口顯示應用程序在.NET沒有任何異常之後就終止了。來自TcpClient的UI操作DataReadAsyncCallback

... 
ns.BeginRead(client.RxPacket, 0, client.RxPacket.Length, new AsyncCallback(TcpClientDataReadAsyncCallback), client); 
... 

private void TcpClientDataReadAsyncCallback(IAsyncResult ar) 
{ 
    Client client = (Camera)ar.AsyncState; 

    // read data 
    // create window form with that data recieved 

    MyForm form = new MyForm(/*read data passed*/); 
    form.Show(); 
} 

或者我應該使用委託來關注另一個線程的UI訪問嗎?

回答

0

做的最好的辦法是檢查是否需要調用:

 MyForm form = new MyForm(/*read data passed*/); 
     if (form.InvokeRequired) 
      form.Invoke(new MethodInvoker(() => form.Show())); 
     else 
      form.Show(); 
+0

的InvokeRequired返回false,而調試代碼,顯示()調用調試器關閉,沒有除了在輸出窗口產生錯誤後立即mscorlib.dll中的InvalidOperationException和system.dll中的ObjectDisposedException –

+0

我認爲問題在於如何從另一個線程創建窗體窗體 –