2009-10-29 3 views
0

내 코드는 Web service 메서드를 호출하는데,이 메서드는 작업을 수행하는 데 몇 분이 걸립니다. 그 동안 내 창은 반응이 없어지고 완전한 흰색 화면을 보여줍니다.응답하지 않음 창

다른 스레드의 호출 메소드를 사용하고 싶지 않습니다.

처리하는 가장 좋은 방법은 무엇입니까?

환경 : C#을 웹 서비스

답변

0

별도의 스레드에서 요청할 수 있습니다. 그러면 UI 스레드가 응답합니다. 작업이 완료되면 응답을 UI 스레드와 다시 동기화해야합니다.

+0

내가 다른 스레드를 사용했지만 내가 응용 프로그램을 – Buzz

+0

응답하지 않습니다. – Buzz

2

BackgroundWorker은 당신의 친구입니다.

여기 WebService에서 BackgroundWorker를 사용하는 방법에 대한 example입니다. 기본적으로 별도의 스레드를 사용하지 않고 UI 측면에서 집중적 인 작업을 수행 할 수있는 방법이 없습니다. BackgroundWorker는 별도의 스레드에서 실행하는 가장 좋은 방법입니다.

1

반응 형 UI를 사용하려면 다른 스레드를 사용해야합니다.

그러나 Visual Studio를 사용하는 경우 생성 된 클라이언트 클래스에는 비동기 메서드 서명이 있습니다. 메서드가 "GetData"인 경우에는 윈도우를 고정하지 않는 "GetDataAsync"라는 메서드가 있어야합니다. 여기

은 예입니다

WsClient client; 
protected override void Load() { 
    base.Onload(); 
    client = new WsClient(); 
    client.GetDataCompleted += new GetDataCompletedEventHandler(client_GetDataCompleted); 
} 

//here is the call 
protected void Invoke() 
{ 
    client.GetDataAsync(txtSearch.Text); 
} 

//here is the result 
void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e) 
{ 
    //display the result 
    txtResult.Text = e.Result; 
} 
+0

내가 다른 스레드를 사용했지만 여전히 응답하지 않는 사이를 전환 할 때 일반적으로 발생 여전히 – Buzz

+0

그러면 문제를 이해하는 데 도움이되는 몇 가지 코드를 게시 할 수 있습니까? –

관련 문제