实现效果
- 主要是用来方便实现在多线程中处理中,对数据的绑定和赋值。
- 我们知道,.NET控件做了大量的工作,使用起来非常方便,一般的控件的数据绑定或者赋值很方便。如下所示
文本赋值:
txtName.Text = "程序君";
控件禁用:
txtOk.Enable = false;
复杂的控件,如DataGridView的数据绑定,只要数据源支持IListDataSource接口就可以了。在一般的单线程程序中,我们的数据绑定和UI的线程是一起的,那么绑定很正常,但是在多线程里面,如果你需要绑定这些数据,那么就需要大费周章了。
- 一般在线程间处理界面控件的数据绑定的时候,处理是这样的,下面通过一个文本控件的属性操作进行演示:
this.Invoke(new MethodInvoker(delegate()
{
this.Text = message;
}));
this.Invoke(new MethodInvoker(delegate()
{
this.Enable= false;
}));
为了方便,封装了一般控件的跨线程访问的公共类CallThreadSafe,操作控件的代码和上面的方式相比有些许不同。
//控件赋值
CallThreadSafe.SetText(this, "您要显示的文本", this);
//禁用按钮
CallThreadSafe.SetEnable(this.btnUpdate, false, this);
实现步骤
在代码引用相关的代码实现动态调用。
实现代码
- 辅助类提供的方法接口如下所示:
/// 设置控件的文本属性
public static void SetText
(TObject objCtrl, string text, Form winf) where TObject : System.Windows.Forms.Control /// 设置控件的可用状态
public static void SetEnable
(TObject objCtrl, bool enable, Form winf) where TObject : System.Windows.Forms.Control
/// 设置控件的焦点定位
public static void SetFocus
(TObject objCtrl, Form winf) where TObject : System.Windows.Forms.Control
/// 设置控件的选择状态
public static void SetChecked
(TObject objCtrl, bool isChecked,Form winf) where TObject : System.Windows.Forms.CheckBox
/// 设置控件的可见状态
public static void SetVisible
(TObject objCtrl, bool isVisible, Form winf) where TObject : System.Windows.Forms.Control
/// 设置工具状态条的文本内容
public static void SetText2
(TObject objCtrl, string text, Form winf) where TObject : ToolStripStatusLabel
- 辅助类CallThreadSafe的使用例子代码如下所示
string phone = phoneList[currentIndex];
string pass = phoneList[phone];
if (!string.IsNullOrEmpty(phone ))
{
CallThreadSafe.SetText(this.lblOperateTips, string.Format("正在处理号码[{0}]...", phone ), this);
CallThreadSafe.SetText(this.txtPhoneNumber, phone, this);
Application.DoEvents();
Thread.Sleep(100);
}
关注「程序君」,分享实用的编程开发技巧,也欢迎大家留言,一起学习交流分享,另外码字不易,请点赞支持。十分感谢!
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/267282.html