2014-05-04 8 views
14

मैं एक WPF परियोजना है, जब मैं चलाने के लिए इस कोड को RowLoad ईवेंट पर मैं त्रुटि नीचे मिला कोशिश:WPF: डिस्पैचर प्रसंस्करण निलंबित कर दिया गया है, लेकिन संदेशों अभी भी प्रक्रिया में

private void ParentGridView_OnRowLoaded(object sender, EventArgs e) 
{ 
    try 
    { 
     if(((RadGridView)sender).Columns != null) 
     { 
      MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture)); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

त्रुटि: डिस्पैचर प्रसंस्करण है निलंबित कर दिया गया है, लेकिन संदेशों को अभी भी संसाधित किया जा रहा है।

ध्यान दें कि GridView नियंत्रण Telerik RadGridView

उत्तर

21

This answer है तुम्हारा के रूप में एक ही स्थिति का वर्णन है। (यह इस answer on a different website का संदर्भ देता है)।

दृश्य पेड़ को अद्यतन करते समय पुनर्वित्त की समस्याओं से बचने के लिए प्रेषक प्रसंस्करण को निलंबित कर दिया गया है।

यदि आपको वास्तव में "पंक्ति लोड" ईवेंट के जवाब में एक संदेश बॉक्स प्रदर्शित करने की आवश्यकता है, तो आपको 'Dispatcher.BeginInvoke() का उपयोग करके कॉल को स्थगित करने की आवश्यकता है।

तो, बदल देते हैं:

MessageBox.Show(((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture)); 

साथ: इस कोड को एक WPF वस्तु में है

var msg = ((RadGridView)sender).Columns.Count.ToString(CultureInfo.InvariantCulture); 
Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(msg))); 

, तो Dispatcher संपत्ति उपलब्ध है। अन्यथा, आपको इसे कहीं और से प्राप्त करने की आवश्यकता है।

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