साथ INotifyPropertyChanged मैं एकधागे
BindingList<T>
जो एक DataGridView करने के लिए बाध्य कर रहा है। मेरी कक्षा में एक संपत्ति की गणना करने में काफी समय लगता है, इसलिए मैंने कार्रवाई को थ्रेड किया। गणना के बाद मैं ऑनप्रॉपर्टी चेंज() घटना को ग्रिड को सूचित करने के लिए बढ़ाता हूं कि मूल्य तैयार है।
कम से कम, यह सिद्धांत है। लेकिन चूंकि OnPropertyChanged विधि को भिन्नता धागे से बुलाया जाता है, इसलिए मुझे ग्रिड की OnRowPrePaint विधि में कुछ थके हुए अपवाद मिलते हैं।
क्या कोई मुझे बता सकता है कि मैं मुख्य थ्रेड में ऑनप्रॉपर्टी चेंज किए गए ईवेंट को कैसे निकाला जा सकता हूं? मैं Form.Invoke का उपयोग नहीं कर सकता, क्योंकि कक्षा MyClass को पता नहीं है कि यह Winforms एप्लिकेशन में चलता है।
public class MyClass : INotifyPropertyChanged
{
public int FastMember {get;set;}
private int? slowMember;
public SlowMember
{
get
{
if (slowMember.HasValue)
return slowMember.Value;
else
{
Thread t = new Thread(getSlowMember);
t.Start();
return -1;
}
}
}
private void getSlowMember()
{
Thread.Sleep(1000);
slowMember = 5;
OnPropertyChanged("SlowMember");
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangingEventHandler eh = PropertyChanging;
if (eh != null)
{
eh(this, e);
}
}
}
एक आकर्षण की तरह काम करता है। अब तक मुझे पृष्ठभूमिवर्कर के बारे में पता नहीं था। यह इस काम को इतना आसान बनाता है, बहुत कुछ। –