Я работаю над приложением 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;
}
}
Проблема, с которой я столкнулся, заключается в том, что то, что я считал последним вызовом (пользовательский интерфейс «разблокирован»), происходит задолго до того, как все вызовы службы будут фактически завершены (я смотрю на это с помощью fiddler). Локально это сработало, но теперь я думаю, что это потому, что оно было обработано быстро, и я не заметил, что в пред-производственной среде вы можете видеть, что моя реализация - tosh:).
Кто-нибудь знает, каков наилучший подход к этому, это не огромная часть всей системы, и не нужно быть чрезмерно причудливым, но я хотел бы дать правильную обратную связь и этот способ программирования ( Асинхронный материал) нужно больше времени, чтобы проникнуть в мою голову.
Любая помощь будет высоко ценится.
Rob