Pau*_*aul 1 c# data-binding multithreading
我正在尝试解决一个经典问题 - 我有一个多线程应用程序,它运行一些处理器密集型计算,带有GUI界面.
每当其中一个线程完成一项任务时,我就想更新一个表上的状态
taskID | 状态
我以下列方式使用DataGridView和BindingList:
BindingList<Task> tasks;
dataGridView.DataSource = tasks
public class Task : INotifyPropertyChanged
{
ID{get;}
Status{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
后台线程可以安全地更新任务的状态吗?GUI中会以正确的顺序看到更改吗?
第二个问题:我什么时候需要致电PropertyChanged?我试着在有和没有通话的情况下跑步,似乎没有打扰..
第三个问题:我在MSDN上看到dataGridView使用BindingSource作为DataGridView.DataSource和BindingList之间的中介这真的有必要吗?
1 - 否.在更新数据绑定属性之前,后台任务必须与UI线程同步.这可以通过使用Task预定来完成TaskScheduler.FromCurrentSynchronizationContext.
如果你还没有使用.NET 4.0(例如,Task不可用),那么它取决于你的"任务"如何运作:具有"完成"概念的任务可以使用BackgroundWorker,并且无限期运行的任务可以使用SynchronizationContext.Post.
2 - PropertyChanged绑定用于更新其显示.不知道为什么它没有调用它为你工作...
3 - BindingSource提供各种功能; 看什么是绑定源以及我为什么需要它?
顺便说一句:欢迎你在SO上提出一个以上的问题.这个问题应该是三个问题.
| 归档时间: |
|
| 查看次数: |
1072 次 |
| 最近记录: |