2009-10-23 12 views
9

यदि कोई Dispatcher निलंबित कर दिया गया है तो संदेश बॉक्स दिखाने का प्रयास करता है तो एक अपवाद उठाया जाता है (Dispatcher.DisableProcessing() कहा जाता है)।डिस्पैचर। डिसेबल प्रोसेसिंग सक्रिय होने पर मैं कैसे पता लगा सकता हूं?

अमान्य ऑपरेशन अपवाद: 'डिस्पैचर प्रोसेसिंग निलंबित कर दिया गया है' (here देखें)।

किसी को भी पता है जहां Dispatcher या निलंबित नहीं किया गया है मैं कैसे पता लगा सकते हैं (ताकि मैं जानता हूँ कि जब BeginInvoke() कॉल करने के लिए)?

संपादित करें 1:

मैं एक संदेशबॉक्स दिखाने के लिए कोशिश कर रहा हूँ Application.DispatcherUnhandledException घटना की प्रतिक्रिया में। हालांकि, अगर इस अनचाहे अपवाद को डेटाबाइंडिंग (यानी ItemsControl.ItemsSource) के दौरान फेंक दिया गया था तो Dispatcher निलंबित कर दिया गया है। MessageBox दिखाने का प्रयास करने में विफल रहता है। हमेशा Dispatcher.BeginInvoke() का उपयोग समस्या हल करता है, लेकिन मैं इसे तब तक नहीं करना चाहता जब तक कि वास्तव में आवश्यक न हो।

संपादित करें 2:

यह इस तरह काम करता है पूरा करने के लिए प्रतिबिंब का उपयोग करना:

var dispatcherType = typeof(Dispatcher); 
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic); 
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher); 
var suspended = count > 0; 
+0

मेरा सुझाव है आप यहां और विवरण प्रदान करते हैं इस प्रकार प्रश्न में जगह पूरा कर रही है। –

उत्तर

0

वहाँ कोई सार्वजनिक इंटरफ़ेस ताकि आप एक कानूनी रास्ता कहने के लिए कि क्या यह या निलंबित नहीं कर रहा है नहीं है। आप अभी भी प्रतिबिंब का उपयोग कर सकते हैं, लेकिन आम तौर पर यह बोलने से संकेत मिलता है कि आप कुछ गलत कर रहे हैं।

यदि आप हमें अधिक जानकारी दे सकते हैं तो हम उचित समाधान सुझा सकते हैं?

+1

एप्लिकेशन की प्रतिक्रिया में। डिस्पैटर UnnhandledException घटना मैं एक संदेशबॉक्स दिखाने की कोशिश कर रहा हूँ। हालांकि, अगर इस अनचाहे अपवाद को डेटाबाइंडिंग (यानी आइटमकंट्रोल.इटेम्ससोर्स) के दौरान फेंक दिया गया था तो डिस्पैचर निलंबित कर दिया गया है। एक संदेशबॉक्स दिखाने की कोशिश कर रहा है तो विफल रहता है। हमेशा Dispatcher.BeginInvoke() का उपयोग समस्या हल करता है, लेकिन मैं इसे तब तक नहीं करना चाहता जब तक कि वास्तव में आवश्यक न हो। – Muri

-1

इस प्रयास करें:

if(currentDispatcher.Thread.ThreadState == System.Threading.ThreadState.Suspended) 
{ 

} 
+0

यह काम नहीं करता है। एक अक्षम करने योग्य समय अवधि के दौरान थ्रेडस्टेट अभी भी "चल रहा है" है। –

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