增加一个委托方法,可以实现后台多线程直接更新UI界面的值,利用了控件的DataBindings,以及 INotifyPropertyChanged接口和事件委托机制。

如果只是通过INotifyPropertyChanged,可在前台单独更新界面,无法通过多线程进行界面值更新。 这可以利用委托和事件的机制,在UI加入事件,通过invoke进行委托调用 ,从而可以实现 。

另外一种方法是设置窗体的CheckForIllegalCrossThreadCalls =false,但该操作方法不是微软建议使用的多线程界面更新的方法。

新建一个winform程序,然后添加两个textbox 和一个button ,写入以下代码 。

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms; namespace TestFrom
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private TestBind model = new TestBind();
private void Form1_Load(object sender, EventArgs e)
{
// CheckForIllegalCrossThreadCalls = false;
model.NoticeHandler += new PropertyNoticeHandler(PropertyNoticeHandler);
Binding bind1 = new Binding("Text", model, "Value");
Binding bind2 = new Binding("Text", model, "Name");
textBox1.DataBindings.Add(bind1);
textBox2.DataBindings.Add(bind2);
} private void PropertyNoticeHandler(object handle, string proName)
{
try
{
BeginInvoke(
new Action(() => model.Bind(proName)));
}
catch
{
}
} private void button1_Click(object sender, EventArgs e)
{
new Thread(() =>
{
while (true)
{
model.Value++;
model.Name = Guid.NewGuid().ToString(); Thread.Sleep(1000);
}
})
{
IsBackground = true
}.Start();
}
public event PropertyChangedEventHandler PropertyChanged;
} public class TestBind : INotifyPropertyChanged
{
private string name; public string Name
{
get { return name; }
set
{
name = value;
SendChangeInfo("Name");
}
} private int value; public int Value
{
get { return value; }
set
{
this.value = value;
SendChangeInfo("Value");
}
} private void SendChangeInfo(string propertyName)
{
if (NoticeHandler != null)
{
NoticeHandler(this, propertyName);
}
} public void Bind(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
} }
public event PropertyNoticeHandler NoticeHandler;
public event PropertyChangedEventHandler PropertyChanged;
} public delegate void PropertyNoticeHandler(object handle, string proName);
}

C# 控件之数据绑定的更多相关文章

  1. asp.net学习之 数据绑定控件--List数据绑定控件

    原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...

  2. [C#]WinForm 中 comboBox控件之数据绑定

    [C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...

  3. WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果

    原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使 ...

  4. WPF 实现跑马灯效果的Label控件,数据绑定方式实现

    原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件:具体代码如下 using System; using S ...

  5. WinForm控件复杂数据绑定常用数据源(对Combobox,DataGridView等控件DataSource赋值的多种方法)

    开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1) 简单数据绑定 简单的数据绑定是将用户控件的某一个属性绑定至某一个类型实例上的某一属性.采用如下形式进行绑定 ...

  6. WP8.1学习系列(第二十三章)——到控件的数据绑定

    在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...

  7. Windows App开发之集合控件与数据绑定

    为ListView和GridView加入数据 ListView採用垂直堆叠得方式显示数据.而GridView则採用水平堆叠得方式. 长相的话嘛,它们都几乎相同. <Grid Name=" ...

  8. 《ASP.NET1200例》嵌套在DataLisT控件中的其他服务器控件---DropDownList控件的数据绑定

    aspx <script type="text/javascript"> function CheckAll(Obj) { var AllObj = document. ...

  9. Repeater控件实现数据绑定,并实现分页效果

    前台显示代码 <pre name="code" class="csharp"><asp:Repeater ID="Repeater1 ...

随机推荐

  1. blueprint的使用

    第一步:导入蓝图模块: from flask import Blueprint 第二步:创建蓝图对象: #Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块 ...

  2. vue页面绑定数据,渲染页面时会出现页面闪烁

    <style type="text/css"> [v-cloak] { display: none; } </style> <div id=" ...

  3. freemarker demo

    <!--freemarker--> <dependency> <groupId>org.springframework.boot</groupId> & ...

  4. 例:三位老师对某次数学竞赛进行了预测,他们的预测如下:   甲:学生A得了第一名,学生B得第三名。   乙:学生C得了第一名,学生D得第四名。   丙:学生D得了第二名,学生A得第三名。 结果表明,他们都说对了一半,说错了一半,并且无并列名次,输出A、B、C和D各自的名次。

    public class demo { public static void main(String[] args) { int a,b,c,d;//代表四个学生 boolean x1,x2,x3;/ ...

  5. 算法题:给出一组数字,拼接一个最大的值 PHP

    举例如下:'9235','42','9','5','8','32','136','343','45' 则拼接的最大的数为 : 9-9235-8-5-45-42-343-32-136 网上坑多,想了很久 ...

  6. 下一站 java

    一直都在windows的圈子里打滚,偶尔玩玩Linux, Python, Java. 可是最近聊起windows的时候,总是觉得有些不得力,比如说,windows下有IE,MSMQ,IIS,普通使用没 ...

  7. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jst1/core"%>报错

    查了一晚上  刚开始觉得最靠谱的还是这个说法: 1.下载jakarta-taglibs-standard-1.1.2.zip(在Weblogic中必须下载1.0版 http://jakarta.apa ...

  8. SQL Server 快速大数据排序方法

    SQL Server 中虽然有 ORDER BY NewID() 方法,但对于数据量比较大的结果集来说,排序那慢的可不是一星半点. 微软官方给了一种方案,https://msdn.microsoft. ...

  9. tomcat使用自签名证书实现https加密访问

    部署好java环境和tomcat之后 执行以下语句 #生成证书,keytool是java工具命令,-genkey生成证书,-alias证书名称,-keyalg应该是指算法,-keystore是证书存储 ...

  10. spring事务详解(二)简单样例

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...