0

저는 wp7 개발에 상당히 익숙하며 현재 웹 호출에서 얻은 응답을 기반으로 값을 업데이트하는 백그라운드 에이전트가있는 응용 프로그램을 개발하고 있습니다.백그라운드 에이전트에서 동기식 웹 호출을 만드는 방법

제 문제는 웹 호출에 대한 응답이 비동기 호출이고 백그라운드 에이전트에서 반환 된 결과에 액세스 할 수 없다는 것입니다.

같은 에이전트 내에서 결과를 처리 할 수 ​​있도록 배경 에이전트에서 동기식 호출을 만들 수있는 방법이 있습니까?

공유 라이브러리의 클래스 내에서 웹 호출을 처리하려고했지만 비동기 호출은 에이전트의 onInvoke 메소드가 완료된 후에 만 ​​사용되므로 사용하지 않습니다. 어떤 아이디어라도 좋을 것입니다.

답변

1

비동기 호출의 Completed 처리기에서 NotifyComplete() 메서드를 호출하기 만하면됩니다. 호출이 끝나면 호출을 제거하십시오.

0

당신이이 같은 AutoResetEvent 사용할 수 있습니다 연결을 사용할 수 있는지 확인해야 기억

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    //do stuff with the web call response 

    //signals locked thread that can now proceed 
    are.Set(); 
} 

하고있는 경우, 가능한 예외를 처리 : 같아야합니다

protected override void OnInvoke(ScheduledTask task) 
{ 
    AutoResetEvent are = new AutoResetEvent(false); 

    //your asynchronous call, for example: 
    WebClient wc = new WebClient(); 
    wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
    wc.OpenReadAsync(searchUri, channel); 

    // lock the thread until web call is completed 
    are.WaitOne(); 

    //finally call the NotifyComplete method to end the background agent 
    NotifyComplete(); 
} 

및 콜백 방법을 백그라운드 에이전트가 메모리 소비 또는 지속 시간으로 인해 연속적으로 두 번 죽으면 OS에 의해 비활성화됩니다.

관련 문제