如何跨线程调用Windows窗体控件
来源:互联网 发布:js过滤运营商的广告 编辑:程序博客网 时间:2024/05/16 11:36
在开发具有线程的应用程序时,有时会通过子线程实现Windows窗体,以及控件的操作,比如:在对文件进行复制时,为了使用户可以更好的观察到文件的复制情况,可以在指定的Windows窗体上显示一个进度条,为了避免文件复制与进度条的同时操作所带来的机器假死状态,可以用子线程来完成文件复制与进度条跟踪操作,下面以简单的例子在子线程中操作窗体中的TextBox控件。代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;//添加线程的命名空间 namespace ppp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread t; //定义线程变量 private void button1_Click(object sender, EventArgs e) { t = new Thread(new ThreadStart(Threadp)); //实例化线程 t.Start();//启动线程 } 自定义方法Threadp,主要用于线程的调用。代码如下: public void Threadp() { textBox1.Text = "实现在子线程中操作主线程中的控件"; t.Abort();//关闭线程 } } 图1 在子线程中操作主线程中控件的错误提示信息 以上是通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它。那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件。下面将上一个例子进行一下改动。代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;//添加线程的命名空间 namespace ppp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread t; //定义线程变量 private void button1_Click(object sender, EventArgs e) { t = new Thread(new ThreadStart(Threadp)); //实例化线程 t.Start();//启动线程 } private delegate void setText();//定义一个线程委托 自定义方法Threadp,主要用于线程的调用。代码如下: public void Threadp() { setText d = new setText(Threading); //实例化一个委托 this.Invoke(d); //在拥用此控件的基础窗体句柄的线程上执行指定的委托 } 自定义方法Threading,主要作于委托的调用。代码如下: public void Threading() { textBox1.Text = "实现在子线程中操作主线程中的控件"; t.Abort();//关闭线程 } } }
- 如何跨线程调用Windows窗体控件
- 如何跨线程调用Windows窗体控件
- c#中如何跨线程调用windows窗体控件?
- c#中如何跨线程调用windows窗体控件?
- c#中如何跨线程调用windows窗体控件
- c#中如何跨线程调用windows窗体控件?
- c#中如何跨线程调用windows窗体控件
- c#中如何跨线程调用windows窗体控件?
- c#中如何跨线程调用windows窗体控件?
- 跨线程调用Windows窗体控件
- 跨线程安全调用Windows 窗体控件
- c#如何跨线程调用窗体控件
- c#如何跨线程调用窗体控件
- 如何:对 Windows 窗体控件进行线程安全调用
- 如何:对 Windows 窗体控件进行线程安全调用
- 如何:对 Windows 窗体控件进行线程安全调用
- 如何:对 Windows 窗体控件进行线程安全调用
- 如何:对 Windows 窗体控件进行线程安全调用
- Qt使用浏览器
- QLabel函数重载,在图片上显示文字
- Const-cast Typecast
- 左右法则——复杂指针解析
- [转]年度最佳幽默
- 如何跨线程调用Windows窗体控件
- 进入云计算的世界
- 个人知识管理的29条原则
- [原创]Linux(ubuntu)环境变量设置
- [原创]Qt显示MessageBox对话框程序
- [原创]QT for Linux(ubuntu)编程常见问题总结
- WebBrowser控件一些使用技巧
- 程序员面试题精选(09)-查找链表中倒数第k个结点
- WebBrowser控件使用详解