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允許代碼在現實世界中執行?
如果lambda是一種方法,您可以應用[DebuggerNonUserCode屬性](http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx)以獲得所需的效果。 – dtb
@dtb:這很值得放在答案中,但我希望看到一個讓我保留lambda的替代方案。 – AnthonyWJones
只是觀察:當'ar.AsyncWaitHandle.WaitOne()'被調用時,Visual Studio會抱怨,而不是在嘗試中的'a.EndInvoke(ar)'時。 –