Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: bargool от 31-01-2014, 14:54:42

Название: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: bargool от 31-01-2014, 14:54:42
Автокад 2014 при вызове Application.Quit() падает, если отрыто больше одного документа. Если открыт один документ - всё нормально закрывается.
При этом ещё и пытается закрыть командную строку (появляется окошко с предупреждением, "Хочешь ли ты закрыть командную строку", ну и там про Ctrl+9 для её открытия)
По приколу, весь код который роняет автокад:
Код - C# [Выбрать]
  1. [CommandMethod("test")]
  2. public void test()
  3. {
  4.         Autodesk.AutoCAD.ApplicationServices.Application.Quit();
  5. }
Наткнулся на это при миграции моего плагина с 2010 автокада (раньше всё работало прекрасно)
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: Александр Ривилис от 31-01-2014, 17:35:35
Подтверждаю. Отправлю в ADN DevHelp.
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: bargool от 31-01-2014, 17:51:28
Вообще, либо товарищи поломали работу с документами в контексте приложения, либо я чего-то перестал понимать.
Ещё один баг обнаружился
http://adn-cis.org/forum/index.php?topic=500.0
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: Александр Ривилис от 31-01-2014, 18:12:21
Ошибку уже отправил. Кстати она у меня воспроизводится и в AutoCAD 2013.
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: Александр Ривилис от 31-01-2014, 21:11:57
Не знаю удовлетворит ли тебя такое временное решение, но лучшего я пока не придумал:
Код - 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.  
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: bargool от 31-01-2014, 23:00:31
Александр Ривилис, эти варианты уж точно получше будут, чем через SendStringToExecute  :)
Спасибо!
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: Александр Ривилис от 04-02-2014, 16:04:47
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.  
Код я не проверял, но теоретически должен работать.
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: bargool от 04-02-2014, 16:24:47
Спасибо!
Мне нужен штатный выход, что бы пользователи смогли в процессе сохранить файлы и проч., поэтому doc.CloseAndDiscard() не подходит.
Придется использовать SendStringToExecute, либо код из вашего ответа #4
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: Александр Ривилис от 06-02-2014, 14:23:10
Я передал эту информацию в Autodesk, а заодно и моё решение из #4. Получил благодарность.  :)
Название: Re: AutoCAD 2014 падает при вызове Application.Quit()
Отправлено: bargool от 06-02-2014, 15:03:15
От меня тоже благодарность за труды  :)