如何知道Revit事件何时执行完成,怎么在外部事件执行完成后才利用执行获取的数据?
抽象类,也可以写成泛型类,避免强转类型,损失性能
public abstract class BaseExternalHandler : IExternalEventHandler
{
public UIDocument UIDoc { get; set; }
public Document Doc { get; set; }
// 执行完成后数据
protected object Data{get; set;}
ExternalEvent _externalEvent = null;
public BaseExternalHandler()
{
_externalEvent = ExternalEvent.Create(this);
}
// 执行完成后处理逻辑。暴露事件。
public event AfterExecuteHandler AfterExecuteEvent;
public void Execute(UIApplication app)
{
this.UIDoc = app.ActiveUIDocument;
this.Doc = UIDoc.Document;
MainFun(app);
AfterExecuteEvent?.Invoke(Data);
}
// 外部事件主要逻辑
public abstract void MainFun(UIApplication app);
public string GetName()
{
return "";
}
public void Run()
{
_externalEvent.Raise();
}
}
继承该抽象类
public class GetProjectDataEventHandler : BaseExternalHandler
{
public override void MainFun(UIApplication app)
{
Dictionary<string, List<string>> result = new Dictionary<string, List<string>>();
// 处理完成后给数据传回去
Data = result;
}
}
实例化外部事件类
public void Main()
{
// 这个实例化的过程必须在主线程中 否则报错;
GetProjectDataEventHandler handler = new GetProjectDataEventHandler();
handler.AfterExecuteEvent += Handler_AfterExecuteEvent;
// 开始外部事件,可以由按钮触发
handler.Run();
}
private void Handler_AfterExecuteEvent(object data)
{
// data 为执行外部事件所获取的数据 直接使用
}