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で実際にコードを実行するようにコードを実行できるようにするにはどうすればよいですか?

+0

ラムダがメソッドの場合、[DebuggerNonUserCode属性](http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)を適用して目的の効果を達成することができます。 – dtb

+0

@dtb:答えに入れる価値はありますが、私はラムダを保持できる代替方法を見たいと思います。 – AnthonyWJones

+0

ちょうど観測: 'ar.AsyncWaitHandle.WaitOne()'が呼び出されたときにVisual Studioがエラーを返します。試行中に 'a.EndInvoke(ar)'が呼び出されたときではありません。 –

答えて

2

DebuggerNonUserCode attributeをメソッドに適用して、デバッガから非表示にすることができます。

+0

このような属性を匿名の代理人にどのように配置しますか? –

関連する問題