Bene IMHO parere l'altro SO risposta non è davvero la strada da percorrere per Windows Forms, anche se forse non corretto.
Normalmente si utilizza ISynchronizeInvoke
per tale funzionalità in WinForms. Ogni controllo contenitore implementa questa interfaccia.
È necessario il metodo BeginInvoke()
per eseguire il marshalling della chiamata al thread corretto.
Basato sulla domanda precedente il codice sarebbe diventato:
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);
}
}
}
Dove si passa il possedere Form
di classe al costruttore di SomeObject
. Il PropertyChanged verrà ora generato nel thread dell'interfaccia utente della classe del modulo proprietario.
fonte
2016-03-09 21:55:36
Non esiste una proprietà 'System.Windows.Forms.Application.Current'. Ti stai mescolando con WPF? –
Questo è lo sfondo di questa domanda e sto cercando di implementare la soluzione qui: http://stackoverflow.com/questions/35901454/how-to-raise-onpropertychanged-on-a-gui-thread-when-an- object-property-is-modifi – Denis
L'unica risposta nella domanda collegata che vedo inizia con * per ** WPF ***. –