C# WinForm线程与UI界面线程参数交互函数
2016-01-14 14:15
666 查看
为了线程的安全性和降低代码的依赖程度,C# windows编程中线程函数与调用的界面之间通信最好用委托来解决。
参数交互函数如下:
delegate void SetControlValueCallback(Control oControl, string propName, object propValue); //声明指向调用函数的委托 /// <summary> /// 线程调用的设置界面控件属性的函数 /// </summary> /// <param name="oControl">控件对象</param> /// <param name="propName">属性名称</param> /// <param name="propValue">属性值</param> private void SetControlPropertyValue(Control oControl, string propName, object propValue) { if (oControl.InvokeRequired) { SetControlValueCallback d = new SetControlValueCallback(SetControlPropertyValue); oControl.Invoke(d, new object[] { oControl, propName, propValue }); } else { Type t = oControl.GetType(); System.Reflection.PropertyInfo[] props = t.GetProperties(); foreach (System.Reflection.PropertyInfo p in props) { if (p.Name.ToUpper() == propName.ToUpper()) { p.SetValue(oControl, propValue, null); } } } }
使用方法:
如启动如下线程:
Thread t = new Thread(new ThreadStart(LoadData)); t.Start();
线程函数如下:
/// <summary> /// Load all data from database /// </summary> void LoadData() { string SqlStr = "SELECT * FROM ExtensionPhone ORDER BY Department,Division"; DataSet ds = this.GetDataSet(SqlStr); if (ds == null) return; dt = ds.Tables[0]; //在线程中直接用下面的两行会出现错误 //grd.DataSource = dt; //lbTotal.Text = "Total Records: " + dt.Rows.Count.ToString(); //用委托的函数代替设置属性和传递参数 SetControlPropertyValue(grd, "DataSource", dt); SetControlPropertyValue(txtSearch, "Focus", null); SetControlPropertyValue(lbTotal, "Text", "Total Records: " + dt.Rows.Count.ToString()); }
线程执行结果如下图:
相关文章推荐
- C# 线程中使用Timer,并向其触发的事件(函数)中传递参数
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- c# 线程调用带参数的函数
- c#带参数和返回值的函数 开启线程调用的方法
- C#WinForm 往线程里传参数的方法总结
- (转)C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
- C#调用VC的DLL的接口函数参数类型转换一览表
- c#跨线程调用控件、函数的问题
- C#,往线程里传参数的方法总结
- MFC创建线程函数及参数的使用
- C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
- C#线程调用带参数的方法
- C# Winform 界面线程的Invoke死锁,以及Application.DoEvent的问题
- C#函数参数传送之out与ref的应用
- C# winform chart 曲线加多线程控制
- C#之WinForm跨线程访问控件实例
- asp.net c#的传参中经常使用到中文参数的处理,下面的函数可以解决中文参数的问题
- C#笔记之 函数可变参数
- 关于C#函数对象参数传递的问题
- C# WinForm跨线程访问控件