Я разрабатываю приложение wp7. В этом я использую службу WCF для получения данных о запуске приложения. После получения данных мне нужно сохранить его в магазине ISO. Сервисный вызов происходит в DoWork
события BackGroundWorker
. Насколько мне известно, с WCF в Windows Phone 7 возможен только асинхронный вызов. Я получаю данные о событии вызова службы Completed
. Но событие Background worker completed
происходит до Completed
события службы. Мне нужно обновить некоторые онлайн-статус пользователя после получения данных из служебного вызова.WP7 Service Call in background worker 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', и он будет работать нормально –