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에서 코드를 실제와 같이 실행하도록 설득하려면 어떻게해야합니까?
람다가 메서드 인 경우 원하는 효과를 얻으려면 [DebuggerNonUserCode 특성] (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)을 적용 할 수 있습니다. – dtb
@dtb : 답변에 넣을 가치는 있지만, 람다를 유지할 수있는 대안을보고 싶습니다. – AnthonyWJones
관찰 : Visual Studio는'ar.AsyncWaitHandle.WaitOne()'이 호출 될 때 불평하고, try 내에있는'a.EndInvoke (ar)'이 아니라면 불평합니다. –