2012-02-29 2 views
0

비동기 소켓 클라이언트가 있는데 패킷이 도착하면 새 양식을 열어서 처리해야합니다.스레드에서 새 양식을 열려면 어떻게해야합니까?

그러나 스레드에있는 것처럼 새 양식이 중단되어 응답하지 않습니다.

비동기 콜백으로 새 양식을 만들고 열 수 있습니까?

+1

당신은 응용 프로그램의 기본 폼에 대한 참조를 필요로 시작 BeginInvoke() 메서드를 호출하고 UI 스레드에서 코드를 실행합니다. Application.OpenForms [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   
    } 
} 

, 다른, 사용은 비동기 콜백이 호출 할 수 있도록

+0

Dispatcher가 내 비주얼 스튜디오에 존재하지 않습니다 ... 정확히 어디에 넣으시겠습니까? – Basaa

+0

WindowsBase.dll에 대한 참조를 추가 했습니까? 언급하는 것을 잊어 버렸습니다. UI 스레드에서 디스패처에 대한 참조를 가져와야하므로 어디서나 비동기 호출을 수행 할 수 있습니다. 어쩌면 생성자에서? – Vertigo