6
この短いコンソールアプリケーションコードを考慮してください。明白な "未処理の例外"でVisual Studioのデバッグが中断するのを防ぐ
static void Main(string[] args)
{
try
{
Action a =() =>
{
throw new ApplicationException("Oops");
};
var ar = a.BeginInvoke(null, null);
ar.AsyncWaitHandle.WaitOne();
try
{
a.EndInvoke(ar);
Console.WriteLine("No message");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
finally
{
Console.ReadKey();
}
}
実行するVisual Studioはその未処理のことを訴えてthrow
に解除されます。デバッガの外部で実行されると、コードは私が期待することを行います( "Oops"と表示されます)。
Visual Studioで実際にコードを実行するようにコードを実行できるようにするにはどうすればよいですか?
ラムダがメソッドの場合、[DebuggerNonUserCode属性](http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)を適用して目的の効果を達成することができます。 – dtb
@dtb:答えに入れる価値はありますが、私はラムダを保持できる代替方法を見たいと思います。 – AnthonyWJones
ちょうど観測: 'ar.AsyncWaitHandle.WaitOne()'が呼び出されたときにVisual Studioがエラーを返します。試行中に 'a.EndInvoke(ar)'が呼び出されたときではありません。 –