AutoCAD 2014 падает при вызове Application.Quit()

Автор Тема: AutoCAD 2014 падает при вызове Application.Quit()  (Прочитано 5531 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Автокад 2014 при вызове Application.Quit() падает, если отрыто больше одного документа. Если открыт один документ - всё нормально закрывается.
При этом ещё и пытается закрыть командную строку (появляется окошко с предупреждением, "Хочешь ли ты закрыть командную строку", ну и там про Ctrl+9 для её открытия)
По приколу, весь код который роняет автокад:
Код - C# [Выбрать]
  1. [CommandMethod("test")]
  2. public void test()
  3. {
  4.         Autodesk.AutoCAD.ApplicationServices.Application.Quit();
  5. }
Наткнулся на это при миграции моего плагина с 2010 автокада (раньше всё работало прекрасно)
Алексей

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

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

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Вообще, либо товарищи поломали работу с документами в контексте приложения, либо я чего-то перестал понимать.
Ещё один баг обнаружился
http://adn-cis.org/forum/index.php?topic=500.0
Алексей

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

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

Отмечено как Решение Александр Ривилис 15-09-2015, 12:11:57

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не знаю удовлетворит ли тебя такое временное решение, но лучшего я пока не придумал:
Код - C# [Выбрать]
  1. [CommandMethod("test2")]
  2. public static void test2()
  3. {
  4.   dynamic app = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
  5.   app.Quit();
  6. }
  7.  

или без dynamic:

Код - C# [Выбрать]
  1. [CommandMethod("test3")]
  2. public static void test3()
  3. {
  4.   object app = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
  5.   app.GetType().InvokeMember("QUIT", BindingFlags.InvokeMethod, null,app,null);
  6. }
  7.  
« Последнее редактирование: 31-01-2014, 21:57:58 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Александр Ривилис, эти варианты уж точно получше будут, чем через SendStringToExecute  :)
Спасибо!
Алексей

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Autodesk'овцы дефект признали и приняли в работу. Пока в качестве замены предложили такой код:
Код - C# [Выбрать]
  1. [CommandMethod("acadQuit", CommandFlags.Session)]
  2. public void acadQuit()
  3. {
  4.     DocumentCollection docs = Application.DocumentManager;
  5.     foreach (Document doc in docs)
  6.     {
  7.         doc.CloseAndDiscard();
  8.     }
  9.     Application.Quit();
  10. }
  11.  
Код я не проверял, но теоретически должен работать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Спасибо!
Мне нужен штатный выход, что бы пользователи смогли в процессе сохранить файлы и проч., поэтому doc.CloseAndDiscard() не подходит.
Придется использовать SendStringToExecute, либо код из вашего ответа #4
Алексей

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

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

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
От меня тоже благодарность за труды  :)
Алексей