关于在窗体中使用多线程调用控件的方式
2011-12-15 15:08
381 查看
小弟之前在窗体的多线程内调用控件,使用:
这条语句,网上好像都不建议这么使用,唉,本人用这种方式调试程序也报错,实在没辙,就采用了另外一种网上认为稍微优化点儿的方式,如下:
以上是摘自CSDN论坛上的,本人小可耻了一下,以下是本人自己的代码:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
这条语句,网上好像都不建议这么使用,唉,本人用这种方式调试程序也报错,实在没辙,就采用了另外一种网上认为稍微优化点儿的方式,如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Threading; namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread threadGet1, threadGet2; threadGet1 = new Thread(new ThreadStart(doGetFromXml1)); threadGet2 = new Thread(new ThreadStart(doGetFromXml2)); threadGet1.Start(); threadGet2.Start(); } object sysobj = new Object(); public void doGetFromXml1() { while (true) { lock (sysobj) { ShowMessage("oooo\r\n"); } } } public void doGetFromXml2() { while (true) { lock (sysobj) { ShowMessage("aaaa\r\n"); } } } delegate void ShowMess(String s); void ShowMessage(string s) { if (this.richTextBox1.InvokeRequired == true) { this.richTextBox1.Invoke(new ShowMess(ShowMessage),new object[]{s}); } else { this.richTextBox1.Text = s; } } } }
以上是摘自CSDN论坛上的,本人小可耻了一下,以下是本人自己的代码:
#region 属性、变量 Thread th = null; object sysobj = new Object(); delegate void Binding(); #endregion #region 构造函数 public frmUserStateQuery() { InitializeComponent(); //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; th = new Thread(new ThreadStart(ThreadMethod)); th.Start(); } #endregion #region 数据绑定 /// <summary> /// 表格控件绑定 /// </summary> void GridBinding() { using (DoubleStarDataContext db = Program.GetDB()) { if (gridControl1.InvokeRequired) { gridControl1.Invoke(new Binding(GridBinding)); } else { gridControl1.DataSource = db.VW_UserState.OrderBy(p => p.DeptName).OrderBy(p => p.UserName).OrderBy(p => p.TableID).OrderBy(p => p.BillID).OrderBy(p => p.HandBillID).OrderBy(p => p.Goods).OrderBy(p => p.ProcedureName).OrderBy(p => p.Rest).OrderBy(p => p.Work).OrderBy(p => p.UnUsed); gridView1.BestFitColumns(); } } } #endregion #region 私有方法 public void ThreadMethod() { while (true) { lock (sysobj) { GridBinding(); //休眠 Thread.Sleep(5000); } } } #endregion
相关文章推荐
- 使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- 关于多线程环境下安全调用窗体控件方法
- 问题-Delphi在多线程中使用其他窗体上的控件,报“尚未调用CoInitialize”解决方法
- c# winform下使用多线程时在线程里如何安全访问窗体控件InvokeRequired
- c# vs2005 多线程中调用窗体控件 (摘)
- 获取iframe中的内容、查找获取指定元素(关于用c++调用WEBBROWSER控件,使用相关接口操作web页面元素的一些方法)
- 关于不同窗体之间的控件查询 - 方式一(静态的窗体数组)
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 关于不同窗体之间的控件查询 - 方式二(事件与回调)
- 如何在多线程中调用winform窗体控件
- winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题
- C# 使用委托实现多线程调用窗体
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 关于Unity中单例调用和委托的使用方式
- 如何在多线程中调用winform窗体控件(转)
- 窗体调用kindeditor,使用WebBrowser控件、把Kindeditor烦在bin/DeBug目录中
- c# vs2005 多线程中调用窗体控件
- 如何在多线程中调用winform窗体控件