Wcf 后台工作程序C中的WP7服务调用#

Wcf 后台工作程序C中的WP7服务调用#,wcf,windows-phone-7,c#-4.0,backgroundworker,Wcf,Windows Phone 7,C# 4.0,Backgroundworker,我正在开发一个wp7应用程序。因为我使用WCF服务来获取应用程序启动时的数据。获取数据后,我需要将其存储在ISO存储中。服务调用发生在BackGroundWorker的dowwork事件中。据我所知,windows phone 7中的WCF只能进行异步调用。我正在获取有关已完成服务呼叫事件的数据。但是后台工作人员已完成事件发生在已完成服务事件之前。我需要在从服务呼叫中获取数据后更新用户的一些在线状态 更新我的状态的最佳做法是什么。在已完成的服务呼叫事件中做得好吗?或者是否有任何方法更新后台工作人

我正在开发一个wp7应用程序。因为我使用WCF服务来获取应用程序启动时的数据。获取数据后,我需要将其存储在ISO存储中。服务调用发生在
BackGroundWorker
dowwork
事件中。据我所知,windows phone 7中的WCF只能进行异步调用。我正在获取有关
已完成
服务呼叫事件的数据。但是
后台工作人员已完成
事件发生在
已完成
服务事件之前。我需要在从服务呼叫中获取数据后更新用户的一些在线状态

更新我的状态的最佳做法是什么。在
已完成的
服务呼叫事件中做得好吗?或者是否有任何方法更新
后台工作人员已完成事件中的状态

这是我的密码

    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
    }
private void startingdata(bool状态)
{
BackgroundWorker工人=新的BackgroundWorker();
worker.DoWork+=新的doworkereventhandler(worker\u DoWork);
worker.RunWorkerCompleted+=新的RunWorkerCompletedEventHandler(worker\u RunWorkerCompleted);
worker.RunWorkerAsync(状态);
}
私有void worker_DoWork(对象发送方,DoWorkEventArgs e)
{
如果(!string.IsNullOrEmpty(this.CurrentUser))
{
ServiceReferenceClient cl=新的ServiceReferenceClient();
cl.ChangeUserStatusCompleted+=新事件处理程序(cl_ChangeUserStatusCompleted);
cl.ChangeUserStatusAsync(this.CurrentUser,true);
e、 结果=真;
}           
}
私有void cl_ChangeUserStatusCompleted(对象发送方,ChangeUserStatusCompletedEventArgs e)
{
//在这里,我将得到下一步处理的结果
}
私有void worker\u RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
//从此处的服务需求中获得的结果
}

为什么要使用backgroundworker进行异步调用?如果需要它在UI线程中执行回调,可以改用dispatcher:

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
    });
}
private void startingdata(bool状态)
{
如果(!string.IsNullOrEmpty(this.CurrentUser))
{
ServiceReferenceClient cl=新的ServiceReferenceClient();
cl.ChangeUserStatusCompleted+=新事件处理程序(cl_ChangeUserStatusCompleted);
cl.ChangeUserStatusAsync(this.CurrentUser,true);
}  
}
私有void cl_ChangeUserStatusCompleted(对象发送方,ChangeUserStatusCompletedEventArgs e)
{
Dispatcher.BeginInvoke(()=>
{
//在此处更新UI
});
}

我必须在启动时为不同的目的进行4次服务调用。所以我更喜欢backgroundworker@Satheesh我的观点是,使用后台工作程序不会有任何用途,因为调用是异步的。您可以使用ManualResetEvent来防止DoWork方法在异步调用结束之前退出,但这完全是浪费时间resources@Satheesh此外,即使在使用后台工作程序时,为什么您绝对希望在
worker\u RunWorkerCompleted
方法中进行处理?只需使用
cl\u ChangeUserStatusCompleted
即可