Перестает работать функция (обработчик событий)

Автор Тема: Перестает работать функция (обработчик событий)  (Прочитано 20344 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Недавно наткнулся на одну статью и вспомнил эту тему - http://drive-cad-with-code.blogspot.ru/2015/10/be-careful-when-handling-document-events.html
Цитата из статьи:
Цитировать
Also, when running the code, when the application changes from the state of command event being handled to the state of command event handler being lost, there is no exception being raised so that the application crashes.
Т.е. не только я с таким столкнулся (моя проблема и по сей день актуальна). Со временем работы в автокаде обработчики просто перестают работать. При этом не возникает Exception и понять причины - практически невозможно

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
При этом не возникает Exception
Exception возникает, но Автокад его молча проглатывает. Надо просто найти в каком месте.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
При этом не возникает Exception
Exception возникает, но Автокад его молча проглатывает. Надо просто найти в каком месте.
Отладкой это невозможно. Нужно придумать какой-то костыль для отлова причины

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Возможно. Дебаг - это то еще шаманство :)

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Возможно. Дебаг - это то еще шаманство :)
Невозможно в том плане, что ошибка может проявиться через 5 минут работы или через 4 часа работы. А может вообще не проявиться. Т.е. для отладки нужно знать точные события, которые к этому приводят, чтобы их можно было повторить при отладке. А вот эти события поймать - это как-раз придумать тот самый костыль

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Что-то я не учел, что меня можно иначе понять. Я имел в виду, что "да, ВОЗМОЖНО (может быть, наверное) надо придумать какой-то костыль", а не пытался опровергнуть утверждение об использовании отладки.  :)

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
вот и я наткнулся на эту проблему.
и если в этом событии возникает ошибка (искусственная, теста ради, необрабатываемая) метод завершается без каких либо упоминаний об этом, а после этого это событие не срабатывает вообще!
если же место ошибки в try catch обернуть, то ошибка обрабатывается и даже событие потом вызывается.
но вот в рабочем коде, с блоком try catch даже, с дебагером все проходит гладко от начала до конца, не попадая в блок catch, но видимо где то тихо все равно рушится и событие перестает работать(при чем метод, вызываемый из события, вне событий ошибок не выдает обычно)
так и не нашел в чем дело.

мб спустя время кто то нашел причину?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
мб спустя время кто то нашел причину?
Универсальной причины нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
и если в этом событии возникает ошибка
В каком "этом" событии?

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
В каком "этом" событии?
XrefBeginAttached или XrefSubCommandEnd

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
но вот в рабочем коде, с блоком try catch даже, с дебагером все проходит гладко от начала до конца, не попадая в блок catch, но видимо где то тихо все равно рушится и событие перестает работать(при чем метод, вызываемый из события, вне событий ошибок не выдает обычно)
:o
Что-то я не понял. Если всё так - тогда надо в другом месте искать сбой.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
метод закомментирую - все работает (не т е обработчик не слетает)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Видимо что-то недопустимое делаешь в этом обработчике. Причем недопустимое именно в контексте этого события.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
метод закомментирую - все работает (не т е обработчик не слетает)
Мда... При таком объёме предоставляемой информации - могу только пожелать успехов в решении проблемы. Что комментируете, где - попробуй угадай. Всё надо вытягивать наводящими вопросами.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
да в этом событии обрабатывал обновленные ссылки (выгружал например если необходимо)
и снова срабатывало это событие, НО выходило из него при первой же проверке (в событии XrefSubCommandEnd):
Код - C# [Выбрать]
  1. if (e.xrefOp != XrefOperation.XrefReloadOperation) return;
и больше не попадало в это событие

но отключив это событие на время выполнения метода падать перестало.