wpf - Why Would a Dependency-Property Implementation Crash My Application When I Provide a Default Value? -


जब मैं एक डिफ़ॉल्ट मान प्रदान करता हूं, तो निर्भरता-प्रॉपर्टी कार्यान्वयन मेरे आवेदन को दुर्घटना क्यों देगा?

कोड का यह खंड मेरे UserControl ऑब्जेक्ट के लिए क्लास घोषणापत्र में है। सब कुछ ठीक काम करता है - यह पूरी तरह से संकलित और चलता है

<प्री> सार्वजनिक स्थिर प्रणाली। विन्डोज़। निर्भरता प्रॉपर्टी डेपप्रॉप = सिस्टम। विन्डोज। निर्भरता प्रतिनिधि। पंजीकरण ("रीकट", टाइपफ (सिस्टम। विंडोज। आकार। संदर्भ), टाइपफ (फ़ू कंट्रोल)); सार्वजनिक प्रणाली। विन्डोज़। आकृतियाँ। रिंकेंगल रिट {मिले (वापसी (सिस्टम। विन्डो। आकार। संदर्भ) (गेट वैल्यू (डेपप्रॉप))); } सेट {सेट वैल्यू (डेपप्रॉप, मान); }}

हालांकि, जब मैं डिफ़ॉल्ट मान को निर्भरता प्रॉपर्टी में जोड़ता हूं:
कोड संकलित करता है, लेकिन जब यह कोशिश करता है एक घातक अपवाद के साथ क्रैश UserControl इन्स्तांत करें

संदर्भ के लिए, मेरा कोड अब ऐसा दिखता है - प्रॉपर्टीमेटाडाटा लाइन के साथ जोड़ा गया है:

  सार्वजनिक स्थिर सिस्टम। विन्डोज़। निर्भरता प्रॉपर्टी DepProp = System.Windows.DependencyProperty.Register ( "रीट", टाइपफ (सिस्टम.Windows.Shapes.Rectangle), टाइपफ (FooControl), नई प्रणाली। Windows.PropertyMetadata (नई प्रणाली। Windows.Shapes.Rectangle ())); सार्वजनिक प्रणाली। विन्डोज़। आकृतियाँ। रिंकेंगल रिट {मिले (वापसी (सिस्टम। विन्डो। आकार। संदर्भ) (गेट वैल्यू (डेपप्रॉप))); } सेट {सेट वैल्यू (डेपप्रॉप, मान); }}  

रजिस्टर करने के लिए कॉल से प्रॉपर्टी मैटाडेटा को हटाने से () किसी भी दुर्घटनाओं या किसी अन्य समस्या के बिना कार्यक्रम को पूरी तरह से कार्य करता है लेकिन मुझे बाद के कोड के लिए डिफ़ॉल्ट मान की आवश्यकता है। मैं इसे दुर्घटनाग्रस्त किए बिना डिफ़ॉल्ट मान को कैसे स्वीकार कर सकता हूं?

जब यह क्रैश होता है, तो निम्न अपवाद आउटपुट विंडो में दिखाए जाते हैं:

  प्रकार 'System.ArgumentException' का एक पहला मौका अपवाद हुआ WindowsBase.dll में एक प्रकार का पहला मौका अपवाद 'System.Reflection.TargetInvocationException' में हुआ है mscorlib.dll में एक प्रकार का पहला मौका अपवाद 'System.Windows.Markup.XamlParseException' प्रस्तुति Fraamework.dll में हुआ  

मुझे यह काम करने की जरुरत है, इसलिए किसी भी सलाह को बढ़िया होगा!

संक्षिप्त उत्तर:

निर्भरता संपत्ति डिफ़ॉल्ट मानों को थ्रेड सुरक्षित होना चाहिए (उदाहरण के लिए सिस्टम से विदाई। फ्रीजबल) लेकिन सिस्टम। Windows.Forms.Rectangle नहीं है।

लंबा उत्तर:

संकेत:

यदि आप विजुअल स्टूडियो का प्रयोग कर रहे हैं तो यह वास्तव में फेंका जाने वाले प्रत्येक अपवाद पर IDE को तोड़ने में मदद करता है। बस "डीबग" -> "अपवाद" पर जाएं और "कॉमन लैंग्वेज रनटाइम अपवाद" "थ्रोड" की जांच करें।

तब आपको संकेत दिया जाएगा और अपवाद संदेश प्राप्त होगा जो आपके मामले में ऐसा दिखता है: " अतिरिक्त जानकारी: 'प्रॉप' संपत्ति के लिए डिफ़ॉल्ट मान किसी विशिष्ट थ्रेड के लिए बाध्य नहीं किया जा सकता है। "


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -