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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исключение ObjectDisposedException, Дескриптор SafeHandle  
:(
    Опции темы
logicStar
Дата 5.9.2011, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во время отладки приложение вдруг выдает что SafeHandle был закрыт и закрывается. Подскажите, что это за дескриптор и как с ним бороться.
Лазил по инету, читал помощь там примеры, но что то я ни чего толком не понял. Там достаточно абстрактно  описано.
PM MAIL   Вверх
sCreator
Дата 5.9.2011, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

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



ObjectDisposedException - Исключение, которое выбрасывается при выполнении операции над удаленным объектом.

SafeHandle - Представляет класс обертки для дескрипторов операционной системы. Этот класс должен наследоваться.

Похоже Вы пытаетесь работать с классом оберткой ( посредником ) winapi после его закрытия ( либо закрыт ресурс которым он управляет ).

Например, Вы закрыли файловый поток, а потом опять пытаетесь в него писать.


PM   Вверх
logicStar
Дата 5.9.2011, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот описание того, что мне надо.

Дочерний поток запускается по нажатию кнопки (см. пример). Если кнопка нажимается первый раз, т.е проверка на  "Unstarted", то запускается поток, объект которого создан при загрузке формы. :Если нажали еще раз кнопку, то текущий дочерний поток закрывается, создается новый поток и опять все заново.
Код

 private void button3_Click(object sender, EventArgs e)
        {
            button3.Enabled = false;// кнопка разблокируется в дочернем потоке, после выполнения последней команды.
                if (fg.ThreadState == System.Threading.ThreadState.Stopped)//поток уже запущен, но к моменту повторного нажатия уже выполнил функцию и по идее просто висит.
                { fg.Abort(); myClass = new WorkCOMPort(status, port, button3); fg = new Thread(myClass.ThreadFunc); fg.Start(); }

                if (fg.ThreadState == System.Threading.ThreadState.Unstarted)//если поток создан еще при загрузке формы. но не запущен, то просто запускаем.
                {fg.Start(); }

Во общем смысл всего этого таков: После запуска дочернего потока основной поток продолжает выполнять свою функцию. И как только дочерний поток выполнит все свои команды основной поток должен сразу узнать об этом. Т.е должен немедленно обработать событие, а именно завершить дочерний поток.
Но при этом повторюсь, основной поток не должен специально опрашивать дочерний на предмет завершенности.
Буду благодарен, если подскажите более красивое решение.

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

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


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

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


 




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


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

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