首页 > 科技 > .Net实现多线程数据绑定和赋值辅助类CallThreadSafe

.Net实现多线程数据绑定和赋值辅助类CallThreadSafe


CallThreadSafe

实现效果

  • 主要是用来方便实现在多线程中处理中,对数据的绑定和赋值。
  • 我们知道,.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