Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"

Автор Тема: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"  (Прочитано 13966 раз)

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Всех приветствую. Кто-нибудь сталкивался с ошибкой "System.Runtime.InteropServices.COMException: 'Filer error'" при добавлении нового документа?
Код - C# [Выбрать]
  1. Application.DocumentManager.Add("acadiso.dwt");

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Пока что выяснил только то, что эта ошибка появляется если создавать окно с помощью MVVM паттерна. Если делать через события, то всё норм.

У меня команды регистрируются примерно так:
1. В Initialization прописана вот такая строка
Код - C# [Выбрать]
  1. Utils.AddCommand("T3", "PSPCREATEFLANGESCS10", "PSPCREATEFLANGESCS10", CommandFlags.Session, CreateFlangesCS10);
2. В ней регистрируется метод "CreateFlangesCS10", который вызывает окно с ViewModel
Код - C# [Выбрать]
  1. private void CreateFlangesCS10() => new MakeFlanges(Flanges.CS10);

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Ошибка появляется
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModalWindow()

Ошибка не появляется
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModelessWindow()

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ошибка появляется
Код - C# [Выбрать]

    Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModalWindow()
В этом случае происходит блокировка переключения документов. И вообще выполнение происходит в контексте документа, а это недопустимо. Отсюда и ошибка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Странно, но я ведь закрываю окно перед выполнением кода.
А можно как-то посмотреть состояние блокировки?

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Странно, но я ведь закрываю окно перед выполнением кода.
А можно как-то посмотреть состояние блокировки?
Без кода понять закрываешь ты или нет - не могу.
Если вкратце, то вот так
Код - C# [Выбрать]
  1. UserControl userControl = parameter as UserControl; //Все мои интерфейсы делаются в UserControl, который потом хостится в кастомном окне, которое и вызывается через методы ShowModalWindow()/ShowModelessWindow()
  2. Window window = Window.GetWindow(userControl);
  3. window.Close();

Но как я понимаю, пока класс *ViewModel живой, то AutoCAD не разблокируется, даже если закрыть окно. Что интересно, предыдущие реализации своих интерфейсов я делал именно так как по ссылке, только не через команды, а через эвенты, да и без какого-либо паттерна.

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
window.Close();
Так я вызываю после
Код - C# [Выбрать]
  1. window.Close();

Отмечено как Решение Lemieux 18-10-2021, 16:06:18

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
window.Close();
Так я вызываю после
Код - C# [Выбрать]
  1. window.Close();
Похоже этого недостаточно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Короче, стратегия понятна. Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?
Тут я ничего сказать не могу. Но создавать новый документ ты можешь и при помощи запуска команды SendStringToExecute, так что он будет создан после того, как управление перейдёт к AutoCAD.

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

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?
Тут я ничего сказать не могу. Но создавать новый документ ты можешь и при помощи запуска команды SendStringToExecute, так что он будет создан после того, как управление перейдёт к AutoCAD.
Я протестирую, но скорей всего просто переработаю структуру проекта. Просто будет бизнес-логика AutoCAD, а которой будет вызываться окно со своей бизнес-логикой, и нужные параметры будут просто передаваться по ссылке, а в команде буду просто закрывать окно и передавать статус окна.

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

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
С SendStringToExecute не получилось, появляется диалог выбора шаблона. Разделил логику окна и AutoCAD.