我有一个应用程序,用户可以启动任务,繁重的任务。我想在一个用户界面网格中管理这些任务的进度(每一行都是一个任务,带有一个进度条)用户可以通过单击一个按钮(使用主线程)来显示这个网格。我遇到的问题是Cross Thread Operation。我知道原因:每当任务进度发生变化(使用 thread1)时,算法都会尝试更新网格数据源(使用主线程)。但我不知道如何解决它。
我的网格的 DataSource 属性设置为BindingList<BackgroundOperation>
.
我的任务的定义(BackgroundOperation)
public class BackgroundOperation
{
public int progression;
public int Progression
{
get { return progression;}
set
{
progression = value;
OnPropertyChanged("Progression");
}
}
public event EventHandler OnRun;
public event EventHandler<ProgressChangedEventArgs> OnProgressChanged;
public event PropertyChangedEventHandler PropertyChanged;
public void Run()
{
var task = new Task(() =>
{
if (OnRun != null)
OnRun(this, null);
});
task.Start();
}
public void ReportProgress(int progression)
{
Progression = progression;
if (OnProgressChanged != null)
OnProgressChanged(this, new ProgressChangedEventArgs { Progression = progression });
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}