首页 / 浏览问题 / 组件GIS / 问题详情
revit格式的文件转udbx提供学习交流使用的工具开发新开发报错
4EXP 2022年04月21日
使用产品:iiobjectsjava 操作系统:win10 x64
数据类型: revit文件rvt格式
问题详细描述:提供的导出demo在.net工程中,在demo的基础上我想实时监控一个文件夹是否增加了revit文件,如果新增就直接进行转换

现在的问题是1、我用到FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = path;
            watcher.Filter = filter;
            watcher.Created += new FileSystemEventHandler(OnProcess);

在OnProcess函数中进行转换,运行到   :                

RevitFile File = new RevitFile(RevitCore.Instance);
Docs = File.Open(rvtfile, new ExportParameter());直接闪退

2、转换思路我新建一定时器,定时转换,用上边的FileSystemWatcher方法,在OnProcess把目录保存下来,

在定时器的回调函数处理转换, m_timer = new System.Threading.Timer(new TimerCallback(MoveFile), null, Timeout.Infinite, Timeout.Infinite);

同样的在RevitFile File = new RevitFile(RevitCore.Instance);
Docs = File.Open(rvtfile, new ExportParameter());直接闪退

请协助查询原因,或者在这种情况下应该怎么应用?非常感谢

2 个回答

您好,根据您的描述,建议查看下定时器结束后转换的时候是否有revit格式的文件
3,685EXP 2022年04月22日
RevitFile File = new RevitFile(RevitCore.Instance);
                    string rvtfile = @"D:\revitwork\项目1.rvt";
                    Docs = File.Open(rvtfile, new ExportParameter());

这样写死,D:\revitwork\项目1.rvt这个文件一直在的,也一样的直接闪退
您好,也就是说您只有文件转换这一个问题是吧,您可以试着将文件路径修改为纯英文且不包括中文与特殊字符。
不是英文的问题,我在界面上新增一个按钮,调用同样的方法,是可以的,

现在我想自动处理,就是文件夹下新增的rvt文件就自动处理,
请问您的工程有输出日志吗,看一下呢

RevitToolSample\Bin_x64\log下有日志iObjects.2022.04.22.log,挺大的截图前几行,这里不能上传文件,能不能加QQ:839922523把文件传给你

您好,这边根据您给的信息判断得出的结论是:这是jvm与c++库的一些native调用的问题呢,这边我加您的QQ具体看下情况
您好,关于您的问题一情况的话,您可以具体断点看一下是不是报错/闪退在new实例化的这一行

RevitFile File = new RevitFile(RevitCore.Instance); 而不是 Docs = File.Open(rvtfile, new ExportParameter()); 的话,

应该是revit引用部分混乱导致的。

解决办法:

将RevitToolkit.dll文件放入到您的组件包bin目录(就是你引用SuperMap.data.dll,添加系统环境变量的那个文件夹)内,然后移除原来的RevitToolKit.dll,引用bin目录中的该dll。(即RevitToolkit.dll和SuperMap.data.dll在同级目录)。

然后在解决方案右键,清除解决方案,保存,关闭vs,重新打开vs启动该工程,问题1可以被解决。

问题2的话,看您代码看您使用的是线程计时器。不管是超图端的iobject数据组件还是revit端的读取组件,都是不建议使用多线程的,这个是架构底层决定的。因此建议您从这个角度去排查问题调整实现。

希望可以帮助到您。
10,538EXP 2022年04月22日
...