2012-08-09 19 views
5

मैं इस कोड है:प्रतिनिधि - अपवाद EndInvoke() कॉल तक इंतजार नहीं करना

using System; 
using System.Runtime.Remoting.Messaging; 

class Program { 
    static void Main(string[] args) { 
     new Program().Run(); 
     Console.ReadLine(); 
    } 

    void Run() { 
     Action example = new Action(threaded); 
     IAsyncResult ia = example.BeginInvoke(new AsyncCallback(completed), null); 
     // Option #1: 
     /* 
     ia.AsyncWaitHandle.WaitOne(); 
     try { 
      example.EndInvoke(ia); 
     } 
     catch (Exception ex) { 
      Console.WriteLine(ex.Message); 
     } 
     */ 
    } 

    void threaded() { 
     throw new ApplicationException("Kaboom"); 
    } 

    void completed(IAsyncResult ar) { 
     // Option #2: 
     Action example = (ar as AsyncResult).AsyncDelegate as Action; 
     try { 
      example.EndInvoke(ar); 
     } 
     catch (Exception ex) { 
      Console.WriteLine(ex.Message); 
     } 
    } 
} 

कई लेख में खड़ा है कि जब मैं BeginInvoke, सभी Exception रों (विधि threaded से यहाँ) कहते हैं जब तक प्रतीक्षा करें मैं फोन EndInvoke और वहां फेंक दिया जाएगा। लेकिन यह काम नहीं करता है, Exception ("Kaboom") "unhandled" है और प्रोग्राम क्रैश हो जाता है। क्या आप मेरी मदद कर सकते हैं?

धन्यवाद!

+0

आपको यह समझाने की आवश्यकता होगी कि आपके डीबगर सेटअप के बारे में क्या विशेष है। कम से कम दस्तावेज़ पर आप डीबग + अपवादों को देखते हैं। वहां कोई भी चेक-बॉक्स बंद करें। –

उत्तर

4

यह ठीक काम करता है। जब आप कहते हैं "और प्रोग्राम क्रैश हो जाता है", तो मुझे आश्चर्य है कि क्या आपके पास सभी अपवादों को तोड़ने के लिए आईडीई सेट है। मुझे इसके साथ कोई दुर्घटना नहीं होती - यह कंसोल को "Kaboom" लिखता है, जैसा कि हम उम्मीद करेंगे। आईडीई के बाहर इसे चलाने का प्रयास करें या ctrl + f5f5 के बजाय इसे चलाने का प्रयास करें।

मुझे लगता है कि आप केवल "मददगार" होने आईडीई देख रहे हैं:

enter image description here

कि ध्यान न दें; आईडीई हमेशा इसे सही नहीं मानता है। यह अभी भी संभाला जाता है।

+0

धन्यवाद :) मेरे पास एक ही खिड़की थी ... लेकिन जब मैं अपना ढांचा तैयार करता हूं और अपने प्रोग्राम में डीएलएल लोड करता हूं, तो एक "अज्ञात" अपवाद प्रोग्राम को रोक देगा, यह नहीं है कि एक ढांचा क्या करना चाहिए ... –

+1

@ लुका यह डिबगर है, फ्रेमवर्क नहीं। आप विकल्प मेनू में इसे बंद कर सकते हैं, आईआईआरसी –

+0

हां, लेकिन .NET भी एसिंक विधियों के साथ काम करता है और मैं एंड्रॉव को समान डीबगर कॉन्फ़िगरेशन के साथ कॉल करके अपवादों को पकड़ सकता हूं ... –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^