0
我正在開發一個wp7應用程序。因爲我使用WCF服務來獲取應用程序啓動數據。獲得數據後,我需要將其存儲在ISO商店中。服務電話發生在DoWork
事件BackGroundWorker
。據我所知,在windows phone 7中只能使用WCF進行異步呼叫。我正在獲取有關Completed
服務呼叫事件的數據。但Background worker completed
事件發生在Completed
事件服務之前。我需要在獲得服務呼叫數據後更新用戶的一些在線狀態。WP7服務電話在後臺工作C#
什麼是更新我的狀態的最佳做法。在服務電話的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
}
我必須在啓動時針對不同目的進行一些4次服務調用。所以我更喜歡backgroundworker – Satheesh
@Satheesh我的觀點是,使用後臺工作人員不會有任何目的,因爲調用是異步的。您可以使用ManualResetEvent來防止DoWork方法退出,直到異步調用結束,但這完全浪費資源 –
@Satheesh另外,即使在使用後臺工作者時,爲什麼您絕對要在'worker_RunWorkerCompleted '方法?只需使用'cl_ChangeUserStatusCompleted',它會正常工作 –