2009-03-20 21 views
5

मैं पृष्ठभूमि कार्यकर्ता धागे में ईवेंट हैंडलिंग के साथ संघर्ष कर रहा हूं।पृष्ठभूमि कार्यकर्ता ईवेंट हैंडलिंग

सभी प्रलेखन मैं का सामना करना पड़ा मुझे विश्वास है कि जब एक DoWork ईवेंट हैंडलर एक अपवाद है कि अपवाद RunWorkerCompleted हैंडलर में से निपटा जाना चाहिए फेंकता है और है कि अपवाद RunWorkerCompletedEventArgs की त्रुटि संपत्ति में उपलब्ध हो जाएगा सुनिश्चित करें।

यह ठीक है, लेकिन डीबग समय के दौरान मैं हमेशा उपयोगकर्ता कोड संदेश द्वारा अनचाहे अपवाद देखता हूं। इससे मुझे विश्वास होता है कि मेरे दृष्टिकोण में कोई समस्या है।

इसे हल करने के लिए मुझे क्या कदम उठाने चाहिए?

सादर, जोनाथन

उत्तर

2

मैंने पहले इस व्यवहार को देखा है, और मैं इसे चारों ओर System.Diagnostics.DebuggerNonUserCode विशेषता के साथ सजाने DoWork हैंडलर द्वारा मिल गया है:

[System.Diagnostics.DebuggerNonUserCode] 
void bw_DoWork(object sender, DoWorkEventArgs e) 
{ ... } 

नोट अगर आप डीबगर में चल रहे हैं तो आप इसे केवल देखेंगे; विशेषता के बिना भी, सब कुछ है जब यह खोल से चल रहा है।

मैंने इसे फिर से देखा, और मुझे अभी भी ऐसा कोई अच्छा कारण नहीं दिख रहा है कि आपको ऐसा करने की आवश्यकता क्यों है। मैं इसे एक डीबगर शरारत कह रहा हूँ।

+0

आपको ऐसा करने की आवश्यकता क्यों है? क्योंकि पृष्ठभूमिवर्कर कैसे काम करता है। काम करने वाले धागे की तुलना में कॉलिंग थ्रेड में त्रुटि को संभालना बहुत आसान है। लेकिन जब डिबगिंग होता है, तो दूसरा तरीका सच है क्योंकि आप सभी स्थानीय चरों तक पहुंच प्राप्त करते हैं। – Samuel

+0

मुझे नहीं लगता कि "पृष्ठभूमि वर्कर्स कैसे काम करता है" एक संतोषजनक उत्तर है। ऐसा लगता है जैसे आप सभी अपवादों को कोडिंग त्रुटियों के संकेत के रूप में देखते हैं - यह कभी-कभी सच है। अगर मैं डीबगर को एक हैंडल अपवाद पर तोड़ना चाहता था, तो मैं पहली मौका अपवाद चालू करता हूं या ब्रेकपॉइंट सेट करता हूं। –

0

आपका दृष्टिकोण सही है। बस संदेश पर जारी रखें और जारी रखें। यदि संदेह है, तो इसे डीबग सत्र के बाहर परीक्षण करें।

1

मुझे इससे पहले समस्या थी। E.Error केवल तब सेट हो जाता है जब आप डीबग मोड में नहीं चलते हैं। यदि आप डीबग में भागते हैं, तो एक्सेक्टीयन अपवाद के स्थान पर रुक जाता है। हालांकि, एक ही प्रोग्राम को गैर डीबग मोड में चलाएं (वीएस डीबग में -> डिबगिंग या Ctrl + F5 के बिना प्रारंभ करें) और ग़लत अपवाद संवाद नहीं आएगा, और e.Error अपवाद होगा। सुनिश्चित नहीं हैं कि क्यों, लेकिन वह यह कैसे काम करता है ....

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