Silverlight WCF с множество повиквания трябва да знае кога всички са завършени

Работя върху приложение 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). Локално това проработи, но сега мисля, че е, защото беше обработено бързо и не забелязах, в предпроизводствената среда можете да видите, че внедряването ми е глупаво :).

Някой знае ли кой е най-добрият подход към това, това не е масивна част от цялостната система и не е нужно да е прекалено изискано, но бих искал да дам правилната обратна връзка и този начин на програмиране (асинхронни неща) има нужда от повече време, за да влезе в главата ми.

Всяка помощ ще бъде много ценена.

грабя


person Modika    schedule 08.06.2011    source източник


Отговори (1)


Това трябва да работи, докато обработката от страната на сървъра се извършва в една нишка. Ако се случи да завъртите друга нишка, тогава завършеното събитие потенциално ще бъде свършено, преди да е свършена действителната работа.

person Jeff Machamer    schedule 08.06.2011
comment
Благодаря, Джеф, има ли нещо специално, което трябва да направя, за да накарам услугата да работи с една нишка? - person Modika; 10.06.2011
comment
Ще работи с една нишка, освен ако не го принудите да не го прави. Щеше да знаеш, ако правеше това. Другата опция е кодът на трета страна, който използвате, да използва множество нишки. Определено можех да видя код на трета страна, използващ множество нишки за манипулиране на изображения... - person Jeff Machamer; 10.06.2011