我正在开发一个wp7应用程序。在这种情况下,我使用 WCF 服务来获取应用程序启动时的数据。获取数据后,我需要将其存储在ISO商店中。服务呼叫发生在DoWork
BackGroundWorker
事件中。据我所知,在Windows Phone 7中,WCF只能进行异步调用。我正在获取有关服务呼叫事件Completed
数据。但是Background worker completed
事件发生在Completed
服务事件之前。从服务呼叫获取数据后,我需要更新用户的一些在线状态。
更新我的状态的最佳做法是什么?在服务呼叫的情况下Completed
做吗?或者有什么方法可以更新事件中的状态Background worker completed
。
这是我的代码
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
}
为什么要使用后台工作线程进行异步调用?如果需要它在 UI 线程中执行回调,可以改用调度程序:
private void StartLoadingData(bool status)
{
if (!string.IsNullOrEmpty(this.CurrentUser))
{
ServiceReferenceClient cl = new ServiceReferenceClient() ;
cl.ChangeUserStatusCompleted += new EventHandler<ChangeUserStatusCompletedEventArgs>(cl_ChangeUserStatusCompleted);
cl.ChangeUserStatusAsync(this.CurrentUser, true);
}
}
private void cl_ChangeUserStatusCompleted(object sender, ChangeUserStatusCompletedEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
// Update the UI here
});
}