2013-08-03 2 views
0

Я неофит при поточной передаче C#. Я пытаюсь получить мою голову вокруг, как сделать 100K веб-запросов, с некоторой степенью параллельности, и сообщать о ходе реального времени с графическим интерфейсом:Конкретный рабочий пример, необходимый с использованием интерфейса IProgress, описанного Albahari

urls processed so far: ###### 
total moved so far: ###### 
timed out so far:  ####3 

Я читал стр 596ff в C# 5.0 в a Nutshell братьями Альбахари, раздел «Отчет о прогрессе». На этом этапе я не вижу, как в экземпляре Progress эти счетчики будут увеличиваться поточно-безопасным образом и точно, как/где пользовательский интерфейс будет обновляться. EVEN в этом примере специально обсуждает различия между написанием на консоль и написанием в GUI, книга использует Console.WriteLine. Я был бы признателен за пример, показывающий, что происходит в экземпляре Progress - например, приращение некоторых переменных int и запись в текстовое поле.

+0

В вашем GUI есть «SynchronizationContext», где вы можете публиковать обновления своего пользовательского интерфейса. Можете ли вы указать, какой код у вас уже есть? –

ответ

0

У меня есть walkthrough on my blog, в частности, указывая на Предостережения:

  • IProgress<T>.Report асинхронный, поэтому она работает лучше всего, если предмет, который вы отправить его неизменна.
  • По соглашению, IProgress<T> progress, переданный в ваш метод TAP, может быть null, поэтому проверьте это до отчета о ходе выполнения.
  • Progress<T> работает лучше всего с пользовательским интерфейсом или другим однопоточным SynchronizationContext.
  • Исключения, сделанные из обработчика Progress<T>, переходят непосредственно к SynchronizationContext, поэтому избегайте исключать исключения из обработчика отчета о ходе работы.

Есть также blog post here, а MSDN docs - неплохие.

Смежные вопросы