0

我正在使用从 Internet 获得的 dll 来使用 C# 中的网络摄像头。如果找不到连接的网络摄像头,我想显示类似“无法找到要使用的摄像头。请确认此时没有其他应用程序正在使用您的摄像头,然后重试”。我遇到的问题是 dll 的创建者在他们的 dll 编程中包含了一个 try-catch ......所以我的 try-catch 从来没有看到是异常,因为出现了“引用的对象未设置为对象的实例”错误代替(由 try/catch 格式化为 MessageBox)。有没有办法在显示消息并显示我自己的消息之前覆盖内置的错误处理?

4

2 回答 2

3

如果你得到“对象引用未设置为对象的实例”(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 的答案。

于 2011-06-25T05:30:05.450 回答
1

您不能仅覆盖 try-catch 块,但您可以覆盖该方法并基本上执行前一个方法正在执行的所有操作并删除 try-catch 块。

于 2011-06-25T05:19:08.713 回答