我想在我自己的Revit addin
中使用崩溃记者,但AppDomain.CurrentDomain.UnhandledException
从未被调用过。似乎Revit本身管理未处理的预期并显示其自己的崩溃对话框。在Revit捕获它们之前,我应该怎么做才能捕获revit addin中所有未处理的异常?
我已经尝试了以下代码行,但它不起作用:它永远不会进入处理程序方法:
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
throw new NotImplementedException();
}
谢谢你的帮助
您是否有任何特殊原因想要在try-catch块中处理此逻辑而不是订阅事件?
在这种情况下,顺便说一句,我相信你正在订阅应用程序窗口的事件处理程序 - Revit永远不会让它在链条上走得那么远,这就是为什么它没有进入你创建的处理程序方法。
您是否正在尝试创建一个通用崩溃报告器来捕获与您的加载项无关的异常?我不认为使用Revit加载项可以实现这一点。如果您正在尝试这样做,我会考虑解析活动日志文件以获取特定的“错误”关键字“。这将有更多关于Revit内部故障的信息。
如果您正在尝试为自己的加载项创建崩溃报告器,那么我只需确保您在Revit调用的方法中使用Try / Catch块来记录代码,该块记录/报告任何抛出的异常。
[Transaction(TransactionMode.ReadOnly)]
public class MyCommand: IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) {
try
{
//do stuff
} catch (Exception exp) {
CrashReporter.LogException(exp);
throw;
}
}
然后将其应用于您的加载项中的任何其他入口点,例如IExternalApplication.StartUp()
,IExternalApplication.ShutDown()
等。