6

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?

+0

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

+0

@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

+0

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ử. –

Trả lời

2

Bạn có thể áp dụng DebuggerNonUserCode attribute cho một phương pháp để ẩn nó khỏi trình gỡ lỗi.

+0

Bạn sẽ đặt thuộc tính như thế nào trên một đại biểu ẩn danh? –

Các vấn đề liên quan