Работя върху приложение Small silverlight за преоразмеряване на изображения на клиентската машина преди качване на сървъра чрез WCF услуга. Имам всичко това работещо, клиентът се свързва и качва изображенията се преоразмеряват, но естеството на приложението е, че на потребителя се показва някаква форма на индикатор за напредък, докато изображенията се качват и те не могат да качват повече, това донякъде работи.
Мислех, че ще свържа Завършеното събитие на повикването към услугата:
service.SaveImageCompleted += new EventHandler<AsyncCompletedEventArgs>(service_SaveImageCompleted);
начинът, по който мислех, че мога просто да накарам това да работи, е да получа брой на всички обаждания, които трябва да направя (броят на изображенията, избрани за обработка) и след това просто да направя проверка в манипулатора на завършено събитие:
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). Локално това проработи, но сега мисля, че е, защото беше обработено бързо и не забелязах, в предпроизводствената среда можете да видите, че внедряването ми е глупаво :).
Някой знае ли кой е най-добрият подход към това, това не е масивна част от цялостната система и не е нужно да е прекалено изискано, но бих искал да дам правилната обратна връзка и този начин на програмиране (асинхронни неща) има нужда от повече време, за да влезе в главата ми.
Всяка помощ ще бъде много ценена.
грабя