我正在开发一个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 :)。
有没有人没有最好的方法,这不是整个系统的重要部分,并不需要过于花哨但我想给出正确的反馈,这种编程方式(异步的东西需要更多的时间进入我的脑海。
非常感谢任何帮助。
罗布
答案 0 :(得分:0)
只要服务器端的处理在单个线程上完成,这应该可以工作。如果你碰巧启动了另一个线程,那么完成的事件可能会在实际工作完成之前完成。