2012-02-29 81 views
0

我有一個異步套接字客戶端,當一個數據包到達時,我需要通過打開一個新窗體來處理它。如何從線程打開新窗體?

但是,因爲它在一個線程中,新窗體掛起並且不響應。

如何創建並從異步回調中打開新表單?

+1

你需要把應用程序的主窗體的引用,因此異步回調可以調用它的BeginInvoke()方法並在UI線程上運行代碼。您可以使用Application.OpenForms [0],但不建議這樣做。 – 2012-02-29 12:10:15

回答

1

使用Dispatcher從背景切換到您的UI線程。

//This has to be done on the UI-Thread, before calling the async method 
var dispatcher = Dispatcher.CurrentDispatcher; 

//Now, in your async callback, do something like this 
private void AsyncCallback(IAsyncResult result){ 
    dispatcher.Invoke(new Action(() => 
    { 
     //Create your form Here   
    } 
} 

如果你希望你的後臺線程等待,直到創建表格和圖示,使用調用(),否則,使用開始

+0

調度員不存在於我的視覺工作室...你想讓我把它放在哪裏? – Basaa 2012-02-29 11:37:30

+0

您是否添加了對WindowsBase.dll的引用?忘了提到這一點。您需要在UI線程上獲得對調度程序的引用,所以在調用任何異步操作之前在任何地方執行。也許在構造函數中? – Vertigo 2012-02-29 12:03:55

相關問題