まあ私見意見ものの多分ない間違った他のSOの答えは、実際にWindowsフォームのために行く方法ではありません。
通常、WinFormsのこのような機能にはISynchronizeInvoke
を使用します。すべてのコンテナコントロールはこのインターフェイスを実装しています。
コールを適切なスレッドにマーシャリングするには、BeginInvoke()
メソッドが必要です。
は、コードになるでしょう、あなたの前の質問に基づいて:あなたは
SomeObject
のコンストラクタに所有
Form
クラスを渡す
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);
}
}
}
。 PropertyChangedは、所有するフォームクラスのUIスレッドで生成されるようになりました。
'System.Windows.Forms.Application.Current'プロパティはありません。あなたはWPFと混合していますか? –
これはこの質問の背景です。私はここで解決策を実装しようとしています:http://stackoverflow.com/questions/35901454/how-to-raise-onpropertychanged-on-a-gui-thread-when-an- object-property-is-modifi – Denis
私が見るリンクされた質問の唯一の答えは、** WPF ***の*で始まります。 –