Аварийное завершение работы AutoCAD при попытке открыть модальное диалоговое окно из команды .Net.

Я разрабатываю плагин AutoCAD .Net, который содержит команду, открывающую модальное окно. В окне должна отображаться веб-страница.

Но у него есть странная ошибка, вот простой код для ее воспроизведения:

[CommandMethod("TEST_BROWSER")]
public void TestBrowserCommand()
{
    var window = new Window();
    var browser = new WebBrowser();
    window.Content = browser;

    browser.Source = new Uri("http://google.com");

    window.ShowDialog();
}

Или еще проще:

[CommandMethod("TEST_BROWSER")]
public void TestBrowserCommand()
{
    Application.ShowModalWindow(new Uri("http://google.com"));
}

Вот последовательность шагов, после которой AutoCAD падает:

  1. Вызовите команду из командной строки (TEST_BROWSER).
  2. Закройте появившееся окно.
  3. Вызов той же команды еще раз
  4. Появляется сообщение об ошибке: http://i.stack.imgur.com/sFWMX.png

Он отлично работает, если открывать немодальные (немодальные) окна, или не использовать веб-браузер, или вызывать код без использования команды.

Но мне нужно модальное окно с браузером, вызываемым из командной строки.

Кто-нибудь еще сталкивался с такой же проблемой?


person reinwolf    schedule 13.06.2013    source источник
comment
Если проблема возникает только при втором вызове, я бы посоветовал вам попробовать очистить все в этом окне браузера после завершения. Попробуйте правильно распорядиться им в конце команды.   -  person Daniel Möller    schedule 18.06.2013
comment
@Daniel Я пытался вызвать метод WebBrowser.Dispose для события Window.Close, но это не помогает. Может действительно какие-то неочищенные данные, но я не знаю, как правильно все почистить.   -  person reinwolf    schedule 25.06.2013
comment
Еще одна вещь, которую вы можете попробовать, это добавить флаги к атрибуту CommandMethod. Есть много флагов, таких как session (команда работает независимо от открытых документов, в главном окне Autocad). Вероятно, также есть флаг modal. Я не могу сказать, что делает каждый флаг, но, возможно, некоторые из них могут быть полезны.   -  person Daniel Möller    schedule 25.06.2013
comment
Я бы попробовал флаг session.   -  person Daniel Möller    schedule 25.06.2013
comment
@Daniel Хорошо, флаг Session работает, а Modal - нет. Опубликуйте это как ответ, и я приму его.   -  person reinwolf    schedule 25.06.2013


Ответы (3)


Атрибут CommandMethod может иметь несколько флагов. Используйте флаг session, чтобы сделать метод независимым от открытого документа и управлять им из главного окна приложения AutoCAD.

person Daniel Möller    schedule 25.06.2013
comment
У меня была такая же проблема, и это решило ее и для меня. (Мне пришлось добавить операторы DocumentLock using ко всем моим транзакциям, но я с радостью буду жить с этим, чтобы заставить его работать!) - person Matt; 28.06.2013
comment
Я просто ненавижу транзакции. Я продолжаю использовать Interop. Надеюсь, Autodesk не решит сделать его устаревшим. - person Daniel Möller; 28.06.2013

Вы можете создать приложение браузера WPF и запустить его с заданным URL-адресом, когда это необходимо. или попробуйте передать команду оболочки с помощью AutoCAD

вы можете открыть веб-сайт в браузере по вашему выбору из CMD, например, chrome.exe "zcodia.com.au"

person Raghulan Gowthaman    schedule 14.06.2013
comment
Команды оболочки мне не нужны, потому что они запускаются как отдельное приложение, а мне нужно модальное окно в AutoCAD. Немодальные окна в любом случае работают нормально, а модальные — нет. - person reinwolf; 14.06.2013

Я не могу проверить в данный момент, но я думаю, что вам нужно изменить свой оператор CommandMethod на: [CommandMethod("TEST_METHOD", CommandFlags.Modal)]

person JayP    schedule 17.06.2013