Saiprasad V Ответов: 1

Системы.invalidoperationexcepti...


Привет,
Я случайно наблюдаю это
System.InvalidOperationException: Value Dispose() cannot be called while doing CreateHandle().

исключение при нажатии кнопки закрытия Winform.
При нажатии кнопки Close я просто закрываю форму, вызывая функцию form Close.

Я определил EventHandler для операции on Form "Closed". В EventHandler я останавливаю таймер и вызываю таймер.Функция Dispose (). Я определяю и запускаю этот таймер при загрузке формы. Таймер имеет тип System.Окна.Формы.Таймер().

Поскольку это таймер WinForms, я считаю, что он будет выполняться потоком пользовательского интерфейса. Перед остановкой таймера я также проверяю, включен ли он или нет. Если он включен, я остановлю его, иначе я избавлюсь от него.

Существует несколько таймеров одного и того же типа, определенных в приложении. Возможно ли, что один таймер каким-то образом влияет на другой?.
Примечание, приведенное в ссылке MSDN Таймер.Метод Остановки (System.Окна.Формы)[^] предложите что-нибудь вроде этого.


Любая помощь в разрешении этого исключения приветствуется.

Спасибо.

Что я уже пробовал:

Я отписался от таймера.Поставьте галочку eventhandler, внутри формы закройте и протестируйте то же самое. Но исключение все еще сохраняется.

Philippe Mori

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

Saiprasad V

Да, я собираюсь снять таймер.Dispose () из обработчика закрытия формы и пусть сборщик мусора сделает все остальное. Спасибо за ваши отзывы.

1 Ответов

Рейтинг:
9

Mehdi Gholam

Не звони Timer.Dispose() при закрытии формы просто отключите таймер, .net избавится от таймера вместе с формой, когда закончит.


Saiprasad V

Спасибо за ответ. Надо ли мне еще отписываться от таймера.Тикнуть eventhandler после остановки?. Спрашиваю об этом, так как у меня есть несколько таймеров одного типа, и только поток пользовательского интерфейса будет выполнять все события Тика.

Mehdi Gholam

Нет необходимости отписываться, сборщик мусора справится с этим.

Saiprasad V

Спасибо. Я попробую это сделать