我使用的是从互联网上获取的用于在C#中使用网络摄像头的DLL。如果找不到连接的网络摄像头,我想显示“无法找到要使用的相机。请确认此时没有其他应用程序正在使用您的相机并再试一次”。我遇到的问题是dll的创建者在他们的dll编程中包含了try-catch ...所以我的try-catch永远不会看到异常,因为“引用未设置为对象实例的对象”错误出现了(由try / catch格式化为MessageBox)。有没有办法在显示消息并显示自己的错误处理之前覆盖内置错误处理?
答案 0 :(得分:2)
如果您将“对象引用未设置为对象的实例”(NullReferenceException
),则可能它们实际上并未捕获异常。
如果你想抓住那个确切的情况(并且让别人不知道并且无法处理其他错误 - 正确的方法来进行异常处理),你可以尝试使用堆栈信息来解决问题包括在例外中:
class Program
{
public static void DoSomething()
{
string blah = null;
Console.WriteLine(blah.Length);
}
static void Main(string[] args)
{
try
{
DoSomething();
}
catch (NullReferenceException e)
{
string methodName = e.TargetSite.Name;
Console.WriteLine(methodName);
System.Diagnostics.StackTrace trace =
new System.Diagnostics.StackTrace(e, true);
int lineNumber = trace.GetFrame(0).GetFileLineNumber();
Console.WriteLine(lineNumber);
if(methodName == "DoSomething" && lineNumber == 13)
{
ShowErrorToUser(); // Todo: Implement this
}
else
{
throw; // Just re-throw the error if you don't know where it came from
}
}
}
}
修改强>
在评论中发现它确实被捕获,并显示在消息框中。
我会留下这个答案,因为它适用于类似的情况,但不适用于这种情况。请参阅OscarMK的答案。
答案 1 :(得分:1)
您不能仅覆盖try-catch块,但是您可以覆盖该方法并基本上执行上一个方法正在执行的所有操作并删除try-catch块。