Vui lòng xem xét mã ứng dụng bảng điều khiển ngắn này.Ngăn không cho Visual Studio gỡ lỗi vi phạm trên "ngoại lệ chưa được xử lý" rõ ràng
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();
}
}
Khi chạy Visual Studio sẽ phá vỡ trên throw
phàn nàn rằng không được quản lý của mình. Khi được thực thi bên ngoài trình gỡ rối, mã sẽ làm những gì tôi mong đợi (hiển thị "Rất tiếc").
Làm cách nào để thuyết phục Visual Studio cho phép mã thực thi như thực hiện trong thế giới thực?
Nếu lambda là một phương pháp bạn có thể áp dụng [DebuggerNonUserCode attribute] (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx) để đạt được hiệu quả mong muốn. – dtb
@dtb: Thats cũng có giá trị đặt trong một câu trả lời, nhưng tôi muốn thấy một thay thế cho phép tôi giữ lại lambda. – AnthonyWJones
chỉ quan sát: Visual Studio than phiền khi 'ar.AsyncWaitHandle.WaitOne()' được gọi, không phải khi 'a.EndInvoke (ar)' nằm trong thử. –