| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > System.Threading.Timer |
| Автор: andrew_sh 4.3.2008, 00:23 |
| Приветствую. Столкнулся с "вечной" прблемой сихронизации таймера. Попробую описать суть. WinControl используеться на странице *.aspx (в принципе не важно где). При его инициализации создается таймер (Threading.Timer). Который каждую секунду (для удобства) проверяет данные на диске и обновляет индикаторы на контроле. Если очень часто обновлять страницу (раз скажем 5-10, постоянно и даже не дожидаясь пока она обновиться до конца), а потом закрыть браузер, вываливается исключение.... Точно не помню..... Что то типа: ошибка синхронизации...вызывающего потока не существует Т.е. тики таймера срабатывают и пытаються обновить контрол, которого уже нет..... Timer.Dispose() не помогает. Проверка Control.IsDisposed также не помогает. Пробовал через дополнительный обьект, также не катит... Даже не знаю куда копать и как с этим бороться. ЗЫ: Примеры Кода и тект исключения приведу завтра утром (остались на работе). |
| Автор: andrew_sh 4.3.2008, 11:40 | ||||
| Вот собственно текст исключения : A first chance exception of type 'System.ComponentModel.InvalidAsynchronousStateException' occurred in System.Windows.Forms.dll Additional information: An error occurred invoking the method. The destination thread no longer exists. Вкратце код:
Класс BDiagnostic:
Но вот собственно все.... Помогите разобраться плиз.....Уже 2 дня парюсь немлгу найти решение.... ЗЫ: За кривой код не бить, я еще только учусь ))) |
| Автор: andrew_sh 4.3.2008, 12:02 | ||
| Все разобрался ... В методе Dispose контрола сначала делал Dispose всем компонертем, а потом останавливал таймер, что и приводило к обращению несуществющих методов (вышеописаное исключение).... Правильный код (читай рабочий)
|