デバッガーが未処理の例外で停止する VS2010 に問題があります。ただし、例外は確実に処理されます。実際、catch ブロックにコードを入れると、F5 キーを押したときにヒットします。Debug -> Exceptions では、「Thrown」チェックボックスがチェックされていないことは間違いないため、IMO には未処理の例外ダイアログがポップアップする理由はまったくありません...
正確なコードを投稿することはできませんが、すぐにサンプルに取り組みます。問題のあるコード セクションの背後にある基本的な考え方は、ハードウェアと通信するスレッドがあり、それとの通信でエラーが発生した場合は、HardwareException
. スレッドは で起動されBeginInvoke
、 を呼び出すとコールバック ハンドラで例外がキャッチされますEndInvoke
。
デバッガーで例外がスローされると、「ユーザー コードによって処理されないハードウェア例外」というメッセージ ボックスが表示されます。
編集 - まあ、これは私を夢中にさせています。私のアプリケーションにあるコードを代表するサンプル コードがあり、次のようになります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
using System.Threading;
namespace ConsoleApplication1
{
public class HardwareException : ApplicationException
{
public HardwareException( string message) : base(message) {}
}
class Program
{
delegate void HardwareTestDelegate();
static void Main(string[] args)
{
HardwareTestDelegate d = new HardwareTestDelegate( HardwareTestThread);
d.BeginInvoke( HardwareTestComplete, null);
while( true);
}
static void HardwareTestThread()
{
throw new HardwareException( "this is a test");
}
static void HardwareTestComplete( IAsyncResult iar)
{
try {
AsyncResult ar = (AsyncResult)iar;
HardwareTestDelegate caller = (HardwareTestDelegate)ar.AsyncDelegate;
caller.EndInvoke( iar);
} catch( Exception ex) {
Console.WriteLine( "Should see this line without getting an unhandled exception message in the IDE");
}
}
}
}
スレッドから HardwareException をスローし、EndInvoke が呼び出されたときに例外を処理します。このサンプル コードを実行すると、予期したとおりに動作するため、Murphy は正しかったと思います。つまり、未処理の例外エラー メッセージが IDE に表示されません。