Revit 二次开发之多线程
2016-09-19 17:14
483 查看
原先开发插件时没有注意到模态和非模态对话框在Revit中的区别,直到最近做了一个项目,需要启动事务对Revit数据进行修改,在窗口为模态对话框中没有问题,但是变成非模态对话时则出现错误,大意是无法在API内容外启动事务等等,其实质就是Revit对多线程支持的问题,不能在除插件主线程外的其他线程中对Revit数据进行修改,好了问题已经定位了,下一步就是解决问题,按照以往解决问题的思路,先去SDK中的Sample中找找看有没有相关事例,发现了正好说明此问题的Demo(ModelessDialog),
参考研究改写代码后问题得到解决,解决问题的核心思路是使用事件机制,将Revit数据修改这部分功能挪动到事件处理函数中,主线程中监听并处理事件,子线程则控制事件的触发目的和触发时机, 目前Revit针对多线程提供了两种事件可供使用,一种是ExternalEvent,另外一种是IdlingEvent,下面详细说说它们。
1:ExternalEvent
Revit提供的外部事件机制,用户在主线程中创建一个外部事件,主线程会轮询监听该事件,子线程中使用该事件对象主动触发事件,主线程监听到后,就会主动调用事先注册好的Handler中的事件处理函数。
2:IdlingEvent
Revit中的UIControlledApplication对象提供的可供注册的空闲事件,会被Revit不定期自动触发,亦即主线程会不定期调用其对应的事件处理函数。
参考的SDK Demo:SDK\Samples\ModelessDialog
ExternalEvent可供参考的简化demo: http://download.csdn.net/detail/ir_xue/9633957
参考研究改写代码后问题得到解决,解决问题的核心思路是使用事件机制,将Revit数据修改这部分功能挪动到事件处理函数中,主线程中监听并处理事件,子线程则控制事件的触发目的和触发时机, 目前Revit针对多线程提供了两种事件可供使用,一种是ExternalEvent,另外一种是IdlingEvent,下面详细说说它们。
1:ExternalEvent
Revit提供的外部事件机制,用户在主线程中创建一个外部事件,主线程会轮询监听该事件,子线程中使用该事件对象主动触发事件,主线程监听到后,就会主动调用事先注册好的Handler中的事件处理函数。
2:IdlingEvent
Revit中的UIControlledApplication对象提供的可供注册的空闲事件,会被Revit不定期自动触发,亦即主线程会不定期调用其对应的事件处理函数。
参考的SDK Demo:SDK\Samples\ModelessDialog
ExternalEvent可供参考的简化demo: http://download.csdn.net/detail/ir_xue/9633957
相关文章推荐
- Revit 二次开发
- 2011年最新Revit 高级二次开发讲座
- Revit 二次开发之“在机械设备之间创建机械系统”
- Building Coder(Revit 二次开发) - 对象关系
- 初学编程者开始Revit 二次开发自学教程
- Building Coder(Revit 二次开发) - 复制 Legend 组件
- Revit 二次开发之IFailuresProcessor
- Revit 2012 二次开发最新API网络课程录像下载
- Building Coder(Revit 二次开发) - 缺少层(Level)属性的族实例
- 分享立陶宛的Revit插件,分析国外二次开发产品为什么多?
- Revit 2011 二次开发之“取得两条直线的交点”
- Revit 二次开发之“创建外部应用”
- Revit 二次开发之“在两个机械设备之间创建风管”
- Revit 二次开发之“参数”
- Revit 二次开发前景
- Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)
- Add-In Manager(Revit 二次开发工具)
- Revit二次开发之“预览”
- Building Coder(Revit 二次开发)- 在新建族中进行镜像操作,并切换当前视图
- Revit 二次开发现状(2009)