Я разрабатываю дополнение Revit, которое выполняет некоторые длительные задачи. В ходе этого процесса я хочу отобразить простое окно WPF с неопределенным индикатором выполнения, меткой для информирования о текущем процессе и кнопкой для разрешения прерывания.
Я уже попробовал наиболее очевидные способы сделать это: создать окно WPF внутри надстройки и отобразить его, но проблема в том, что пользовательский интерфейс зависает, независимо от того, как я это реализую. Во время некоторых процессов весь пользовательский интерфейс Revit замерзает / становится белым, поэтому я действительно не ожидал, что мое встроенное окно WPF в любом случае будет нормально работать в этих условиях.
Обходной путь, который я нашел, состоял в том, чтобы иметь окно WPF как отдельное приложение (файл EXE), которое я мог запустить из надстройки. Я основал свою реализацию на этом примере .
Хорошая часть этого в том, что он не зависает независимо от того, что происходит с Revit.
Плохо то, что последовательность того, как Windows ставит в очередь вызовы моего отдельного приложения WPF, иногда отличается от последовательности этих вызовов из моего дополнения. Иногда это приводит к ситуации, когда процесс Revit завершается, но окно WPF по-прежнему отображается (в ожидании последнего завершающего вызова, который, по-видимому, уже выполнен, но затем приложение возобновило работу с другим отложенным вызовом).
Желательно, чтобы я обрабатывал приложение WPF так же, как вы можете, например, обрабатывать приложение Excel из .NET. Вы создаете объект ExcelApp, делаете с ним все, что хотите, и в конце концов избавляетесь от него.
Проблема в том, что я понятия не имею, как это сделать.
- Как мне представить API приложения WPF для моей надстройки?
- Может ли приложение WPF быть отзывчивым и управляемым из надстройки Revit одновременно? (пользователь все еще может нажать кнопку отмены, неопределенный индикатор выполнения не останавливается)