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

如果lambda是一種方法,您可以應用[DebuggerNonUserCode屬性](http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)以獲得所需的效果。 – dtb

+0

@dtb:這很值得放在答案中,但我希望看到一個讓我保留lambda的替代方案。 – AnthonyWJones

+0

只是觀察:當'ar.AsyncWaitHandle.WaitOne()'被調用時,Visual Studio會抱怨,而不是在嘗試中的'a.EndInvoke(ar)'時。 –

回答

相關問題