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(); 
    } 
} 

의 처리되지 않은 것을 불평 throw에 중단됩니다 Visual Studio를 실행합니다. 디버거 외부에서 실행될 때 코드는 내가 원하는 것을 수행합니다 ("Oops"표시).

Visual Studio에서 코드를 실제와 같이 실행하도록 설득하려면 어떻게해야합니까?

+0

람다가 메서드 인 경우 원하는 효과를 얻으려면 [DebuggerNonUserCode 특성] (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)을 적용 할 수 있습니다. – dtb

+0

@dtb : 답변에 넣을 가치는 있지만, 람다를 유지할 수있는 대안을보고 싶습니다. – AnthonyWJones

+0

관찰 : Visual Studio는'ar.AsyncWaitHandle.WaitOne()'이 호출 될 때 불평하고, try 내에있는'a.EndInvoke (ar)'이 아니라면 불평합니다. –

답변

2

DebuggerNonUserCode attribute을 디버거에서 숨기는 방법에 적용 할 수 있습니다.

+0

이러한 특성을 익명의 대리자에게 어떻게 적용 하시겠습니까? –