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

时间:2011-06-08 19:33:28

标签: silverlight wcf silverlight-3.0 wcf-client

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

我以为我会将呼叫的已完成事件连接到服务:

service.SaveImageCompleted += new EventHandler<AsyncCompletedEventArgs>(service_SaveImageCompleted);

我认为我可以简单地让它工作的方式是计算我需要进行的所有调用(选择要处理的图像数量的计数),然后在Completed事件中进行检查处理程序:

   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;
        }
    }

我遇到的问题是,我认为最后的调用(UI获得“解锁”)在所有服务调用实际完成之前发生(我通过fiddler查看)。本地工作,但我现在认为这是因为它被快速处理,我没有注意到,在预生产环境中你可以看到我的实现是tosh :)。

有没有人没有最好的方法,这不是整个系统的重要部分,并不需要过于花哨但我想给出正确的反馈,这种编程方式(异步的东西需要更多的时间进入我的脑海。

非常感谢任何帮助。

罗布

1 个答案:

答案 0 :(得分:0)

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