本人上一篇关于IExternalEventHandler用法的文章有一些bug,易出现问题Attempting to create an ExternalEvent outside of a standard API execution,查询多篇文章和十五老师得知是非模态窗口不是有效API上下文。
重写写了关于IExternalEventHandler的小demo
单独一个类写继承IExternalEventHandler
public class MyExternalEventHandler : IExternalEventHandler
{
public Action<UIApplication> action;
public void Execute(UIApplication app)
{
if (action != null)
{
action.Invoke(app);
}
}
public string GetName()
{
return "";
}
}
写一个全局的变量
public static class GlobalEEH
{
public static ExternalEvent externalEvent;
public static MyExternalEventHandler myExternalEventHandler;
}
在TestCommand的构造函数中实例化全局变量
public class TestCommand : IExternalCommand
{
public TestCommand() {
GlobalDatas.GlobalEEH.myExternalEventHandler = new Commons.MyExternalEventHandler();
GlobalDatas.GlobalEEH.externalEvent = ExternalEvent.Create(GlobalDatas.GlobalEEH.myExternalEventHandler);
}
}
在需要调用外部事件时设置action的具体内容
GlobalDatas.GlobalEEH.myExternalEventHandler.action = (app) =>
{
TaskDialog.Show("Revit", "Haha");
};
GlobalDatas.GlobalEEH.externalEvent.Raise();