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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно закрывать форму во время Invoke 
V
    Опции темы
nyxiscoo1
  Дата 4.2.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток, уважаемые форумчане. Нужен ваш совет.
Есть приложение, которое в запускает несколько операций в отдельных потоках и слушает эвенты этих операций, при этом есть форма, которая отображает прогресс и прочую статистику выполнения операций на основе данных полученных с помощию событий.
Данные полученные от событий соответственно выводятся на форму через Invoke.
Проблемма заключается в том, что если операции в потоках не завершились, а пользователь попытается закрыть форму будет вызвано исключение с текстом вроде Cannot access disposed object. Из-за того, что события от потоков приходят, а Invoke уже делать нельзя.

Подскажите пожалуйста, какие действия необходимо выполнить, чтобы корректно завершить работу программы в случае описанном выше.

Вариант с перехватом данного исключения мне не кажется правильным, я думаю должен быть более правильный способ.
PM   Вверх
emmanuil
Дата 4.2.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для начала при закрытии той формы отпишись от всех событий. Или если у тебя без событий, то при посылке в форму данных проверь на null и IsDisposed.

Это сообщение отредактировал(а) emmanuil - 4.2.2009, 13:26
PM MAIL   Вверх
Rififi
Дата 4.2.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



nyxiscoo1
Перед закрытием формы гаси потоки с ожиданием их завершения.
Более правильный с точки зрения исключений вариант - создать все потоки в отдельном домене и при завершении работы выгружать его.
PM MAIL   Вверх
nyxiscoo1
Дата 4.2.2009, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо всем за оперативные ответы, вы мне очень помогли. 
Вопрос решен.
PM   Вверх
emmanuil
Дата 4.2.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если просто закрывается форма с прогрессом и результатами, а работа должна идти дальше, то ничего гасить не нужно, а только отписаться и проверять как я писал. Учти, что остановка потока может занять не мало времени. Если же ты хочешь просто прервать операцию, то с доменами будет лучше, если будет сбой в одном домене, то это не приводит к сбоям внутри хост-процесса. Но обмен данными между доменами медленнее чем прямые вызовы. Если критична скорость, то стоит подумать. Анализируй и выбирай. smile
PM MAIL   Вверх
nyxiscoo1
Дата 5.2.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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