ShowModelessWindow криво работает в accoreconsole.exe

Автор Тема: ShowModelessWindow криво работает в accoreconsole.exe  (Прочитано 9869 раз)

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
AutoCAD 2016 x64

Полагаю, что это очередной баг accoreconsole.exe.

В составе абстрактного класса Autodesk.AutoCAD.ApplicationServices.Core.Application определены методы ShowModelessWindow и ShowModalWindow. Соответственно эти методы доступны для работы и в accoreconsole.exe.

Однако по факту, вызов ShowModelessWindow приводит к отображению окна, которое сразу же после его открытия "зависает", т.е. не реагирует на пользовательские действия, например на попытку закрытия окна кликом мышки по соответствующей кнопке в верхнем правом углу (курсор мышки так же - в виде "песочных часов").

Код - C# [Выбрать]
  1. public class ExtensionApplication : IExtensionApplication {
  2.  
  3.     static Window win = null;
  4.  
  5.     static ExtensionApplication() {
  6.         win = new Window();
  7.     }
  8.  
  9.     public void Initialize() {
  10.         if (null != win) cad.ShowModelessWindow(win);
  11.         // if (null != win) cad.ShowModalWindow(win);
  12.     }
  13.  
  14.     public void Terminate() {
  15.         // Nothing is here.
  16.     }
  17. }
« Последнее редактирование: 19-04-2016, 14:19:33 от Андрей Бушман »

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Вероятно именно так и задумано - приложение консольное.
Когда карта противоречит местности, доверять следует местности. Обратите внимание на то, что это класс Autodesk.AutoCAD.ApplicationServices.Core.Application, вынесенный в accoremgd.dll ещё в AutoCAD 20012. Это, как вы выразились "так и задумано" скорее всего обусловлено тем, что поведение обозначенного метода в accoreconsole.exe попросту не тестировалось (как и многое другое в обозначенном приложении).

Я понимаю, что вы "рыцарь ObjectARX", но тем не менее существуют разумные границы безразборчивой "защиты" всего, что относится к работодателю... Если функционал заявлен в API, следовательно он должен работать во всех возможных контекстах его использования. Ведь обозначенные выше методы определены не в составе acmgd.dll...

Через обозначенные выше методы я пробовал хостить WCF службу в составе экземпляра Window, ожидая, что может быть в этом случае служба всё же будет получать сообщения от клиентов. Ожидания не оправдались. Попутно выяснился обозначенный выше баг (или "так и задумано", как вы выразились). Между "задумано" и "реализовано" есть существенная разница...

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Выложи пожалуйста полный тестовый проект - я отправлю в ADN DevHelp.
Так а чем вас не устроил тот код, который я выложил в первом сообщении? Он прост и нагляден. Его легко скопировать и вставить в новый проект - этого будет достаточно, чтобы воспроизвести проблему. Обозначенный код скопирован из рабочего проекта, который не является тестовым, в виду чего не подлежит отправке на сторону. Я наблюдаю идентичное поведение как для экземпляров класса Window, так и для экземпляров пользовательских классов унаследованных от него.

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Тем, что нужен как минимум еще класс MyWindow.
Window, а не MyWindow. Я подправил код до того, как вы написали последнее сообщение. Так что MyWindow не нужен для воспроизведения бага.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
В консольном акаде 2013 поведение аналогичное.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Кстати, а вот сервис в консольном акаде 2013 отработал на "ура" (если не считать того, что отправляемый на консоль текст по факту там не появляется)... Ну это я так, для самого себя пометку дал.
« Последнее редактирование: 19-04-2016, 16:15:37 от Андрей Бушман »

Отмечено как Решение Андрей Бушман 19-04-2016, 16:11:28

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

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Тогда непонятно, почему этот метод вынесен в accoremgd.dll...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне вот более интересно почему Application.ShowAlertDialog не показывает диалоговое окно, а печатает в командную строку... ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Мне вот более интересно почему Application.ShowAlertDialog не показывает диалоговое окно, а печатает в командную строку... ;)
а если перед этим FILEDIA временно установить в 1?

Мне вот более интересно почему...
Мне более интересно, чего такого нахимичили в 2016-м, что стало невозможно достучаться до хостящихся в нём WCF сервисов. В этом свете поведение Application.ShowAlertDialog меня интересует в значительно меньшей мере...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
а если перед этим FILEDIA временно установить в 1?
А в этом случае даже NETLOAD не работает. Команда просто проглатывается:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А в этом случае даже NETLOAD не работает.
а если после NETLOAD, программно в коде перед вызовом алерта с последующим возвратом значения после вызова?