您的位置:首页 > 其它

利用数据绑定(DataBinding)简化多线程数据展示

2010-08-21 17:51 239 查看
  经常做WinForm开发的人可能会遇到这样一种情况,WinForm程序后台有许多线程在执行任务,前台界面需要适时或定时显示后台任务执行的情况。此类任务界面通常如下:  


这里存在一个问题是如何在界面上显示后台线程上的状态数据,也就是多线程如何访问控件。

  .NET中的控件并不是线程安全的,因此我们通常是用如下方法在界面上显示后台线程的数据:

    public class TaskEntity {
private int _TaskId = 0;
private int _TaskSuccess = 0;
private int _TaskFail = 0;
public int TaskId { get { return _TaskId; } set { _TaskId = value; } }
public int TaskSuccess { get { return _TaskSuccess; } set { _TaskSuccess = value; } }
public int TaskFail { get { return _TaskFail; } set { _TaskFail = value; } }
public int TaskAll { get { return _TaskSuccess + _TaskFail; } }
}


  然后定义一个全局的数据源用于存放这些任务的引用,同时将该数据源邦定到前台界面上


  然后启动2个后台线程

private Thread thread1;
private Thread thread2;
void btnBS_Click(object sender, EventArgs e) {
workStatus = !workStatus;
if (workStatus) {
thread1 = new Thread(Dowork1);
thread1.Start();

thread2 = new Thread(Dowork2);
thread2.Start();
}
}


  最后定义数据更新方法

private void UpdateControlValue() {
dataGridView1.Invalidate();
txtAll.DataBindings[0].ReadValue();
txtFail.DataBindings[0].ReadValue();
txtSuccess.DataBindings[0].ReadValue();
}


  做完这些后就可以点击验证,执行结果如下:



  最后通过比对2种方法的实现,执行结果,可以得出,在.NET中利用数据绑定(DataBinding)可以简化多线程数据展示,使得代码的可维护性更高,对于新人也更容易入手。当然,示例中也存在一些问题,如更新不及时,帮定数据源有限制等。但是想比解决的问题,这些代价完全可以承受,并且通过添加简单的同步代码就可以解决。

注:如需Demo,请留下邮箱(不知道博客园怎么上传资源 *_*|| );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: