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