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