INotifyPropertyChanged的我有一個有螺紋
BindingList<T>
它綁定到一個DataGridView。我班的一個房產需要很長的時間來計算,所以我對這個行爲進行了調整。計算後,我提出OnPropertyChanged()事件來通知網格該值已準備就緒。
至少,這是理論。但是由於OnPropertyChanged方法是從一個不同的線程調用的,所以我在網格的OnRowPrePaint方法中得到了一些有意識的異常。
任何人都可以告訴我如何在主線程中執行OnPropertyChanged事件嗎?我不能使用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);
}
}
}
工程就像一個魅力。直到現在我還不知道BackgroundWorker。 這使得這個任務如此簡單,thx很多。 – 2009-12-10 12:59:45