#c# #wpf #event-handling #revit-api
#c# #wpf #обработка событий #revit-api
Вопрос:
Я пытался создать плагин Revit, который позволяет пользователю просматривать проблемы, которые хранятся на удаленном сервере в локальной версии файла. Он должен создать новый перспективный 3D-вид из сохраненных данных на сервере и открыть его в Revit. Однако всякий раз, когда я пытаюсь его запустить, я получаю предупреждение об исключении таким образом:
Exception thrown: 'Autodesk.Revit.Exceptions.InvalidOperationException' in RevitAPIUI.dll
An unhandled exception of type 'Autodesk.Revit.Exceptions.InvalidOperationException' occurred in RevitAPIUI.dll
Attempting to create an ExternalEvent outside of a standard API execution
Думаю, я смутно понимаю, что это значит, но я не уверен, что именно нужно изменить, чтобы это исправить. Я определяю пользовательский ExternalEventHandler и реализую его метод Execute:
class CameraEventHandler : IExternalEventHandler
{
Issue issue;
int i;
public CameraEventHandler(Issue issue, int index)
{
this.issue = issue;
this.i = index;
}
public void Execute(UIApplication app)
{
Document doc = app.ActiveUIDocument.Document;
using (Transaction t = new Transaction(doc, "CameraTransaction"))
{
t.Start();
...
//Irrelevant code to set camera position programmatically
...
t.Commit();
}
}
public string GetName()
{
return "Camera event handler";
}
}
А затем в одной из моих форм WPF я создаю ExternalEvent и вызываю метод Raise:
private void RevitViewButton_Click(object sender, RoutedEventArgs e)
{
CameraEventHandler handler = new CameraEventHandler(issue, issueIndex);
ExternalEvent cameraEvent = ExternalEvent.Create(handler);
cameraEvent.Raise();
}
Однако исключение выдается, когда оно достигает ExternalEvent .Создать метод.
Редактировать: я считаю, что стоит упомянуть, что приложение WPF, которое я использую, запускается как плагин Revit.
Ответ №1:
Revit API нельзя использовать вне допустимого контекста Revit API:
Это не ошибка, Газ, это задумано.
Решение, предложенное Gaz, абсолютно правильное!
Ответ №2:
Читая этот блог, кажется, что это ошибка в Revit.
Решение, по-видимому, заключается в создании вашего пользовательского обработчика во IExternalCommand.Execute
время или IExternalApplication.OnStartup
, а не во время создания события.