WPFとCaliburn.Microでアプリケーションを構築しています。私はUIを更新するために、UIスレッドと同期する必要があることを知っている他のプログラミング言語からタスクのViewModelプロパティを更新する
public class DemoViewModel : PropertyChangedBase
{
private int m_Progress;
public int Progress
{
get { return m_Progress; }
set
{
if (value == m_Progress) return;
m_Progress = value;
NotifyOfPropertyChange();
NotifyOfPropertyChange(nameof(CanStart));
}
}
public bool CanStart => Progress == 0 || Progress == 100;
public void Start()
{
Task.Factory.StartNew(example);
}
private void example()
{
for (int i = 0; i < 100; i++)
{
Progress = i + 1; // this triggers PropertChanged-Event and leads to the update of the UI
Thread.Sleep(20);
}
}
}
:私は、タスク/スレッドと私は私が正しくUIを更新するために必要なものを疑問に思ってからプログレスバーを更新したいです私のコードはうまくいきます。私が見逃したことや散発的なエラーを引き起こす可能性のあるものはありますか、同期の面倒を隠す魔法がありますか?
INPCイベントは自動的にUIスレッドにマーシャリングされるため、心配する必要はありません。しかし、...あなたは実際に更新するにはあまりにも忙しいので、あなたは20の血まみれのミリ秒(Thread.Sleep(20)!!!!!!!)ごとにUIを更新すればUIのジャックは表示されません。 – Will