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

ADN Club => AutoCAD .NET API => Тема начата: Lemieux от 17-10-2021, 13:38:21

Название: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 17-10-2021, 13:38:21
Всех приветствую. Кто-нибудь сталкивался с ошибкой "System.Runtime.InteropServices.COMException: 'Filer error'" при добавлении нового документа?
Код - C# [Выбрать]
  1. Application.DocumentManager.Add("acadiso.dwt");
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 17-10-2021, 14:30:36
Пока что выяснил только то, что эта ошибка появляется если создавать окно с помощью 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);
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 17-10-2021, 14:58:32
Ошибка появляется
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModalWindow()

Ошибка не появляется
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModelessWindow()
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 17-10-2021, 15:19:58
Ошибка появляется
Код - C# [Выбрать]

    Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModalWindow()
В этом случае происходит блокировка переключения документов. И вообще выполнение происходит в контексте документа, а это недопустимо. Отсюда и ошибка.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 17-10-2021, 15:23:22
https://adndevblog.typepad.com/autocad/2012/07/open-a-new-drawing-document-from-a-modal-dialog.html
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 17-10-2021, 19:23:51
Странно, но я ведь закрываю окно перед выполнением кода.
А можно как-то посмотреть состояние блокировки?
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 17-10-2021, 20:02:27
Странно, но я ведь закрываю окно перед выполнением кода.
А можно как-то посмотреть состояние блокировки?
Без кода понять закрываешь ты или нет - не могу.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 17-10-2021, 20:48:33
Странно, но я ведь закрываю окно перед выполнением кода.
А можно как-то посмотреть состояние блокировки?
Без кода понять закрываешь ты или нет - не могу.
Если вкратце, то вот так
Код - C# [Выбрать]
  1. UserControl userControl = parameter as UserControl; //Все мои интерфейсы делаются в UserControl, который потом хостится в кастомном окне, которое и вызывается через методы ShowModalWindow()/ShowModelessWindow()
  2. Window window = Window.GetWindow(userControl);
  3. window.Close();

Но как я понимаю, пока класс *ViewModel живой, то AutoCAD не разблокируется, даже если закрыть окно. Что интересно, предыдущие реализации своих интерфейсов я делал именно так как по ссылке, только не через команды, а через эвенты, да и без какого-либо паттерна.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 17-10-2021, 23:03:00
Lemieux,
Пока модальное окно (вызываемое через ShowModalWindow()) не закрыто, вызывать Application.DocumentManager.Add нельзя.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 18-10-2021, 08:40:32
window.Close();
Так я вызываю после
Код - C# [Выбрать]
  1. window.Close();
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 18-10-2021, 15:59:55
window.Close();
Так я вызываю после
Код - C# [Выбрать]
  1. window.Close();
Похоже этого недостаточно.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 18-10-2021, 16:07:37
Короче, стратегия понятна. Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 18-10-2021, 16:13:42
Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?
Тут я ничего сказать не могу. Но создавать новый документ ты можешь и при помощи запуска команды SendStringToExecute, так что он будет создан после того, как управление перейдёт к AutoCAD.

Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 18-10-2021, 16:19:06
Но неужели тут никто не пишет под AutoCAD на MVVM или никто не добавляет новые документы?
Тут я ничего сказать не могу. Но создавать новый документ ты можешь и при помощи запуска команды SendStringToExecute, так что он будет создан после того, как управление перейдёт к AutoCAD.
Я протестирую, но скорей всего просто переработаю структуру проекта. Просто будет бизнес-логика AutoCAD, а которой будет вызываться окно со своей бизнес-логикой, и нужные параметры будут просто передаваться по ссылке, а в команде буду просто закрывать окно и передавать статус окна.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 18-10-2021, 22:18:25
С SendStringToExecute не получилось, появляется диалог выбора шаблона. Разделил логику окна и AutoCAD.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 18-10-2021, 22:27:26
С SendStringToExecute не получилось, появляется диалог выбора шаблона.
И что у тебя в SendStringToExecute?
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 19-10-2021, 09:16:19
С SendStringToExecute не получилось, появляется диалог выбора шаблона.
И что у тебя в SendStringToExecute?
SendStringToExecute("_NEW", true, false, true)
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Александр Ривилис от 19-10-2021, 14:51:33
Lemieux,
Я имел в виду совсем другое. Ты делишь свою команду на две. В первой диалог, во второй код начинается с Application.DocumentManager.Add("acadiso.dwt"); Первая запускает вторую при помощи SendStringToExecute после закрытия диалога.
P.S.: В SendStringToExecute должен быть пробел или "\n" после имени команды.
Название: Re: Ошибка "System.Runtime.InteropServices.COMException: 'Filer error'"
Отправлено: Lemieux от 19-10-2021, 20:18:28
Lemieux,
Я имел в виду совсем другое. Ты делишь свою команду на две. В первой диалог, во второй код начинается с Application.DocumentManager.Add("acadiso.dwt"); Первая запускает вторую при помощи SendStringToExecute после закрытия диалога.
P.S.: В SendStringToExecute должен быть пробел или "\n" после имени команды.
Да я уже реализовал логику, которую выше описывал, так проще получить ссылку на новый документ и работать с ним.