खैर IMHO राय अन्य एसओ का जवाब नहीं वास्तव में खिड़कियों रूपों के लिए जाने का रास्ता है, हालांकि शायद गलत नहीं है।
आम तौर पर आप WinForms में ऐसी सुविधा के लिए ISynchronizeInvoke
का उपयोग करेंगे। प्रत्येक कंटेनर नियंत्रण इस इंटरफ़ेस को लागू करता है।
आपको उचित थ्रेड पर कॉल को मार्शल करने के लिए BeginInvoke()
विधि की आवश्यकता होगी।
अपने पिछले प्रश्न के आधार पर कोड बन जाएगा:
public class SomeObject : INotifyPropertyChanged
{
private readonly ISynchronizeInvoke invoker;
public SomeObject(ISynchronizeInvoke invoker)
{
this.invoker = invoker;
}
public decimal AlertLevel
{
get { return alertLevel; }
set
{
if (alertLevel == value) return;
alertLevel = value;
OnPropertyChanged("AlertLevel");
}
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
this.invoker.BeginInvoke((Action)(() =>
PropertyChanged(this, new PropertyChangedEventArgs(propertyName))), null);
}
}
}
कहाँ SomeObject
के निर्माता के लिए मालिक Form
वर्ग गुजरती हैं। PropertyChanged अब मालिक फॉर्म वर्ग के यूआई थ्रेड पर उठाया जाएगा।
स्रोत
2016-03-09 21:55:36
कोई 'System.Windows.Forms.Aplication.Current' प्रॉपर्टी नहीं है। क्या आप डब्ल्यूपीएफ के साथ मिश्रण कर रहे हैं? –
यह इस प्रश्न के लिए पृष्ठभूमि है और मैं यहां समाधान को लागू करने की कोशिश कर रहा हूं: http://stackoverflow.com/questions/35901454/how-to-raise-onpropertychanged-on-a-gui-thread-when-an- ऑब्जेक्ट-प्रॉपर्टी-is-modifi – Denis
मेरे द्वारा देखे गए लिंक किए गए प्रश्न का एकमात्र उत्तर * WPF *** के लिए * से शुरू होता है। –