Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ProgressChanged event 
:(
    Опции темы
lufton
Дата 4.3.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Создал я класс. Один из методов по сути зализит на страницу по указанному адресу, парсит её и рекурсивно погружается (переходит) на один уровень глубже, при этом скачивая картинки с начальной страницы. Сделал я в этом классе событие:
Код

        public event GrabPageProgressChangeEvent GrabPageProgressChange;

        public void InvokeGrabPageProgressChange(GrabPageProgressChangeEventArgs args)
        {
            var handler = GrabPageProgressChange;
            if (handler != null) handler(this, args);
        }

Код

    internal delegate void GrabPageProgressChangeEvent(object sender, GrabPageProgressChangeEventArgs args);

    internal class GrabPageProgressChangeEventArgs
    {
        public double Progress;

        public GrabPageProgressChangeEventArgs(double progress)
        {
            Progress = progress;
        }
    }

В нужном месте и в нужное время вызываю InvokeGrabPageProgressChange, при этом передаю double значение прогресса. На форме создаю экземпляр объекта данного класса, подписываюсь на событие GrabPageProgressChange и вызываю упомянутый метод, так выглядит обработчик:
Код

        void GrabberGrabPageProgressChange(object sender, GrabPageProgressChangeEventArgs args)
        {
            progressBar1.Value = (int)args.Progress;
        }

Всё хорошо, срабатывает событие GrabPageProgressChange, срабатывает обработчик, но при попытке изменить значение progressbar вылетает исключение:
Цитата

Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "progressBar1" не из того потока, в котором он был создан.

Это очень интересно, ведь вроде бы всё правильно, и, я так понимаю, на то они и события, чтобы делать код красивым.
Подскажите пожалуйста, где ошибка.
PM MAIL   Вверх
lufton
Дата 5.3.2011, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Мне интересно, как тогда устроено аналогичное событие у WebBrowser? На сколько я помню, я свободно могу проделать аналогичную операцию с браузером, то есть, по изменению загрузки страницы прикрутить обработчик, который бы изменял значение ProgressBar. Вот только что попробовал и получилось. Как реализовать аналогичное?
PM MAIL   Вверх
-Mikle-
Дата 6.3.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Нельзя работать с контролами формы из разных потоков. 
Это вам поможет:
Код

        void GrabberGrabPageProgressChange(object sender, GrabPageProgressChangeEventArgs args)
        {
            progressBar1.Invoke((Action)delegate
            {
                progressBar1.Value = (int)args.Progress;
            });
        }



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.2331 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.