Revit二次开发之Socket通信实现自动化处理任务(一)

本例将在Revit ExternalApplication中启动一个服务器,监听客户端发送的消息,并通过这个消息,打开对应的rvt文件,当然你可以基于此定义更多消息并处理这些消息,以实现更多可能。
本例将分为以下几个部分:
1、需要构建一个ExternalApplication常驻Revit,并获取UIApplication对象,用以打开项目文件
2、在ExternalApplication中启动Socket服务器,监听客户端消息
3、由于Revit可能会处理耗时任务,需要建立一个单例的消息队列,管理来自不同客户端的不同消息,以便Revit顺序处理
4、Client程序发送消息给Revit服务器
第一部分,Revit外部应用,以打开一个Revit文档为例

    public class Exporter : IExternalApplication
    {
        private UIApplication uiApp = null;
        public Result OnStartup(UIControlledApplication application)
        {
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            /创建并启动第二部分创建的服务器
            Communicator server = new Communicator("127.0.0.1", 2000);
            server.StartListening();
            application.ControlledApplication.ApplicationInitialized += OnApplicationInitialized;
            return Result.Succeeded;
        }

        public Result OnShutdown(UIControlledApplication application)
        {
            return Result.Succeeded;
        }

        private void OnApplicationInitialized(object sender, ApplicationInitializedEventArgs e)
        {
            //获取UIApplication对象
            Application app = sender as Application;
            uiApp = new UIApplication(app);
            uiApp.Idling += HandleMessage;
        }
        //循环处理消息
        private void HandleMessage(object sender, IdlingEventArgs e)
        {
            if (MessageStation.Messages.HasMessage)
            {
                KeyValuePair<int, string> message = MessageStation.Messages.GetMessage();
                try
                {
                    Document document = uiApp.Application.OpenDocumentFile(message.Value);
                    TaskDialog.Show("document", document.PathName);
                }
                catch (Exception ex)
                {
                    TaskDialog.Show("error", ex.ToString());
             
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值