6

कृपया इस शॉर्ट कंसोल ऐप कोड पर विचार करें।विजुअल स्टूडियो डीबगिंग को एक स्पष्ट "अनचाहे अपवाद" पर तोड़ने से रोकें

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 पर टूट जाएगा। डीबगर के बाहर निष्पादित होने पर कोड जो मैं अपेक्षा करता हूं (प्रदर्शित करता है "ओप्स")।

मैं विज़ुअल स्टूडियो को कैसे संसाधित करने के लिए कोड को निष्पादित करने की अनुमति देता हूं क्योंकि यह असली दुनिया में करेगा?

+0

यदि लैम्ब्डा एक विधि थी तो आप वांछित प्रभाव प्राप्त करने के लिए [डीबगर नॉनयूसर कोड विशेषता] (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx) लागू कर सकते हैं। – dtb

+0

@ डीटीबी: एक जवाब में रखने के लायक है, लेकिन मैं एक विकल्प देखना चाहता हूं जो मुझे लैम्ब्डा को बनाए रखने की अनुमति देता है। – AnthonyWJones

+0

सिर्फ अवलोकन: विजुअल स्टूडियो शिकायत करता है जब 'ar.AsyncWaitHandle.WaitOne()' कहा जाता है, न कि जब 'ए.इंड इनवोक (एआर)' जो कोशिश में है। –

उत्तर

2

आप डीबगर से इसे छिपाने के लिए DebuggerNonUserCode attribute लागू कर सकते हैं।

+0

आप एक अज्ञात प्रतिनिधि पर ऐसी विशेषता कैसे रखेंगे? –