0

C#でWebカメラを利用するためにインターネットから取得したdllを使用しています。接続されているウェブカメラが見つからない場合は、「使用するカメラが見つかりません。現在、他のアプリケーションがカメラを使用していないことを確認して、もう一度お試しください」のように表示したいと思います。私が抱えている問題は、dllの作成者がdllプログラミングにtry-catchを含めていることです...したがって、「オブジェクトのインスタンスに設定されていない参照オブジェクト」エラーが代わりに発生するため、try-catchは例外を認識しません。 (メッセージボックスへのtry / catchによってフォーマットされます)。メッセージを表示して自分のメッセージを表示する前に、組み込みのエラー処理をオーバーライドする方法はありますか?

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 に答える