Автозагрузка проекта при запуске Revit
Вопрос: Мне интересно, как можно загрузить файл автоматически при загрузке Revit.
Класс UIControlledApplication является единственным параметром метода OnStartup класса, реализующего интерфейс IExternalApplication. А метод OpenAndActivateDocument есть только в классе UIApplication.
Как же вызвать метод UIApplication.OpenAndActivateDocument из метода OnStartup? Или может как-то можно решить эту проблему по-другому?
Ответ: Действительно, класс UIControlledApplication не может использоваться для открытия проекта, так как Revit все еще находится в процессе инициализации и не готов еще к открытию файлов.
Но, в методе OnStartup вы можете настроить систему таким образом, чтобы после завершения загрузки Revit открылся файл.
Но, перед тем как это делать, я все же напомню, что наиболее легкий способ запустить Revit и сразу же загрузить файл – это воспользоваться методом Process.Start.
Как вы и заметили, после завершения инициализации Revit можно уже воспользоваться методом UIApplication.OpenAndActivateDocument, как это продемонстрировано в статье Закрытие активного документа (на англ.)
Для подготовки метода открытия проекта из метода OnStartup, нужно временно подписаться на событие Idling. Затем, в обработчике этого события, отписаться от него и в этом же обработчике можно открыть проект.
Ответ от Arnošt Löbel: Сейчас с помощью Revit API можно решить эту проблему более корректно без использования события Idling. 3 года назад, это действительно была единственная возможность достичь этого результата. Сейчас же можно использовать событие ApplicationInitialized. Так же, как и в случае с Idling, нужно подписаться на событие ApplicationInitialized в методе OnStartup. Revit вызовет это событие немного позднее, когда инициализация Revit будет полностью завершена. Но, помните, что как и с событием Idling, метод OpenAndActivateDocument может быть использован только если в Revit нет активных документов.
Обсуждение: http://adn-cis.org/forum/index.php?topic=1886
Опубликовано 21.02.2015