本人上一篇关于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();

 

posted on 2023-05-15 15:58  HRDK  阅读(206)  评论(0)    收藏  举报