Revit 二次开发 基础篇——插件启动入口之程序又双叒叕崩溃了

Revit 二次开发 基础篇——插件启动入口之程序又双叒叕崩溃了

  1. 前言

    ​ 一开始我照着书和网上的例子编写插件时,revit程序运行的很好,几乎不会程序崩溃和revit软件退出的情况。自己在工作时,往往会发生插件运行出错导致程序崩溃。那问题出在哪里呢?

    ​ 首先,作为Revit应用程序在调用"入口"外部应用或外部命令时,必然会对这部分代码进行异常捕捉,否则插件崩溃将会导致revit应用也崩溃。

    ​ 那我就会问了,既然这样,为什么还是会出现插件运行出现错误导致Revit应用程序的崩溃呢?对于这个问题我还没有找到明确地答案。一言以蔽之:你的程序有问题。这样笼统地答复显然无法让我在以后的实践中避免类似的情况重演。

    ​ 为此只能给出我的猜测:插件运行时抛出异常,并未得到捕获和处理; 紧接着,插件中的进程被迫释放已经请求的资源,而这部分资源已经与Revit数据库发生了某种关系,至少是修改了某些数据,从而导致Revit数据破坏致使程序崩溃。

  2. 崩溃的原因

    ​ 我遇到的Revit程序崩溃的情况有:

    1. ​ 插件代码编写有问题导致程序崩溃;

    2. ​ Visual Studio IDE 外部启动调试插件时,停止调试后导致Revit退出;

    3. ​ Visual Studio IDE 附加进程到Revit应用程序调试时,在某些情况下停止调试会导致Revit退出。

      ​ 我可以确定原因: 插件的代码抛出了异常 。至于其他的原因,我希望大家可以和我广泛地交流,彼此成长。

      ​ 我昨晚写了很简单地程序来实验了程序主进程抛出异常,多线程程序线程抛出异常的程序的运行情况。结论是:只要存在未被捕获的异常发生,程序就会停止运行

      测试一
      前两次时无异常运行下的输出。最后一次时在打印"你好"后,抛出一个异常,原本要打印的“正常运行!”没有执行。 Revit 二次开发 基础篇——插件启动入口之程序又双叒叕崩溃了_第1张图片
      测试二
      有两个子线程执行,一个线程周期性打印“一号线程”,另一个线程周期性打印“二号线程”并随机抛出一个异常。
      Revit 二次开发 基础篇——插件启动入口之程序又双叒叕崩溃了_第2张图片
      代码:
      Revit 二次开发 基础篇——插件启动入口之程序又双叒叕崩溃了_第3张图片

  3. 可能的解决办法

    在外部应用的Execute方法中,套一个Try Catch块捕获异常,防止异常提交到更上一层。
    附加进程退出调试Revit自动退出的解决办法附加进程选项中,增加 托管兼容模式

你可能感兴趣的:(Basic)