1

C# を使用して Microsoft Visual Studios 2010 で開発したプログラムは、次のエラーを生成しています: https://dl.dropboxusercontent.com/u/19853155/code%20error%2001.jpg

私は問題を次のコード セグメントに切り分けました。

if (gui.rawLogLSM.InvokeRequired)
{
    gui.rawLogLSM.Invoke(new MethodInvoker(delegate
    {
        gui.rawLogLSM.AppendText(t.ToString()); 
        gui.rawLogLSM.ScrollToCaret();
    }));
}
else
{
    gui.rawLogLSM.AppendText(t.ToString());
    gui.rawLogLSM.ScrollToCaret();
}

基本的に、このコード セグメントでは、シリアル ポートから生データを読み取り、それをバイト単位でテキスト ボックスに出力しています。(一度にバッファー全体を読み取ることはできません。これは、プロジェクトで行っていることを無効にするためです)。

このエラーが実際にどのように生成されるか、またはどのような条件下で発生するかは完全にはわかりません。このエラーは、私の不在時に同僚がアプリケーションを使用しているときにのみ発生し、エラーを再現できませんでした。

例外からの情報からのエラーは、上記のコードが離れている大きなコードブロックの周りに try/catch があるため、メッセージボックスの形で表示されます。

したがって、私の質問は主に、このエラーをどのように解決できますか、またはそのエラーを強制的に表示するにはどうすればよいですか?

助けてくれてありがとう!

4

2 に答える 2

1

呼び出しが別のスレッド上にあり、別のスレッドがテキストボックスを破棄しているときにテキストボックスを呼び出そうとすると例外がスローされる可能性があります(おそらくフォームを閉じますか?)。テキストボックスが別のスレッドに配置されていることが原因である場合、1 つの解決策は、呼び出し内の AppendText と ScrollToCaret を try/catch で囲み、その特定のエラーを飲み込むことです。

于 2013-08-08T21:25:50.143 に答える