具有多个调用的Silverlight WCF需要知道所有调用何时完成

具有多个调用的Silverlight WCF需要知道所有调用何时完成,silverlight,wcf,silverlight-3.0,wcf-client,Silverlight,Wcf,Silverlight 3.0,Wcf Client,我正在开发一个小的silverlight应用程序,在通过WCF服务上传到服务器之前调整客户机上的图像大小。我有所有这些工作,客户端连接和上传的图像正在调整大小,但应用程序的性质是,用户显示某种形式的进度指标作为图像上传,他们不能上传更多,这是工作排序 我想我会将电话的完整事件连接到服务: service.SaveImageCompleted += new EventHandler<AsyncCompletedEventArgs>(service_SaveImageCompleted)

我正在开发一个小的silverlight应用程序,在通过WCF服务上传到服务器之前调整客户机上的图像大小。我有所有这些工作,客户端连接和上传的图像正在调整大小,但应用程序的性质是,用户显示某种形式的进度指标作为图像上传,他们不能上传更多,这是工作排序

我想我会将电话的完整事件连接到服务:

service.SaveImageCompleted += new EventHandler<AsyncCompletedEventArgs>(service_SaveImageCompleted);
我遇到的问题是,我以为最终的调用UI被解除阻塞发生在所有服务调用实际完成之前,我正在通过fiddler查看这一点。这在本地是可行的,但我现在认为这是因为它处理得很快,而且我没有注意到,在预生产环境中,您可以看到我的实现是tosh:

有没有人不知道最好的方法是什么,这不是整个系统的一个重要组成部分,也不需要过于花哨,但我想给出正确的反馈,这种异步编程的方式需要更多的时间进入我的头脑

任何帮助都将不胜感激


Rob

只要服务器端的处理在一个线程上完成,它就应该可以工作。如果您碰巧启动了另一个线程,那么完成的事件可能会在实际工作完成之前完成。

谢谢Jeff,我需要做什么特殊的事情才能让服务在单个线程上运行?除非您强制它不运行,否则它将在单个线程上运行。如果你这样做,你就会知道。另一个选项是,您正在使用的某些第三方代码正在使用多个线程。我肯定可以看到第三方代码使用多线程进行图像处理。。。
   void service_SaveImageCompleted(object sender, AsyncCompletedEventArgs e)
    {
        serviceCallsMade++;

        if (totalServiceCalls == serviceCallsMade)
        {
           // MessageBox.Show("Transactions Complete!");
           IsWorking = false;
           ProgressBarWorking.Visibility = Visibility.Collapsed;
           UploadButton.Visibility = Visibility.Visible;
           LayoutMessage.Visibility = Visibility.Visible;
        }
    }