如何从线程中打开新表单?

时间:2012-02-29 11:16:57

标签: c# winforms forms thread-safety asyncsocket

我有一个异步套接字客户端,当数据包到达时,我需要通过打开一个新表单来处理它。

但是,因为它在一个线程中,新表单挂起并且没有响应。

如何从异步回调创建和打开新表单?

1 个答案:

答案 0 :(得分: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           
    }
}

如果您希望后台线程等到创建并显示表单,请使用Invoke(),否则,使用Begin