wp7 앱을 개발 중입니다. WCF 서비스를 사용하여 응용 프로그램 시작시 데이터를 가져옵니다. 데이터를 가져온 후에 ISO Store에 저장해야합니다. DoWork
이벤트에서 서비스 호출이 발생했습니다. BackGroundWorker
입니다. 내 지식을 위해서만 비동기 호출은 WCF 윈도우 폰 7에서 가능합니다. Completed
이벤트에 대한 데이터를 얻고 있습니다. 그러나 서비스 Completed
전에 Background worker completed
이벤트가 발생합니다. 서비스 요청에서 데이터를 가져온 후 사용자의 온라인 상태를 업데이트해야합니다.WP7 서비스 담당자가 배경 작업자 C#
내 상태를 업데이트하는 가장 좋은 방법은 무엇입니까? Completed
서비스 콜의 이벤트로 할 수 있습니까? 또는 Background worker completed
이벤트의 상태를 업데이트 할 수있는 방법이 있습니까? 여기
은 왜 비동기 호출의 경우 BackgroundWorker를 사용하는 내 코드
private void StartLoadingData(bool status)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync(status);
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
if (!string.IsNullOrEmpty(this.CurrentUser))
{
ServiceReferenceClient cl = new ServiceReferenceClient() ;
cl.ChangeUserStatusCompleted += new EventHandler<ChangeUserStatusCompletedEventArgs>(cl_ChangeUserStatusCompleted);
cl.ChangeUserStatusAsync(this.CurrentUser, true);
e.Result = true;
}
}
private void cl_ChangeUserStatusCompleted(object sender, ChangeUserStatusCompletedEventArgs e)
{
// here i will get my result to process next step
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// result obtained from service need here
}
시작시 다른 용도로 약 4 개의 서비스 호출을해야합니다. 그래서 backgroundworker를 선호했습니다. – Satheesh
@Satheesh 제 관점은 호출이 비동기 적이기 때문에 배경 작업자를 사용하는 것이 목적을 제공하지 않는다는 것입니다. 비동기 호출이 끝날 때까지 DoWork 메소드가 종료되지 않도록 ManualResetEvent를 사용할 수 있습니다. 그러나 리소스가 완전히 낭비입니다. –
@Satheesh 또한 백그라운드 작업자를 사용하는 경우에도 왜 'worker_RunWorkerCompleted '방법? 그냥'cl_ChangeUserStatusCompleted'를 사용하면 잘 작동합니다. –