以线程安全的方式设置WinForm窗体控件的属性。
(修改为利用反射,设置控件的属性值。)
在进行多线程环境下的WinForm程序设计时,工作线程执行过程中,经常会需要更新窗体控件的状态,比如显示进度、提示信息等。而在非UI线程中,是不能直接访问UI线程所创建的窗体控件的。
Control.Invoke (Delegate, Object[]) 提供了在拥有Control底层窗体句柄的线程上执行代理的途径。
下面这个例子,演示了在多线程中设置文本框的值。
在窗体上放置一个文本框textBox1。放置两个按钮:btnStart用于启动多个线程设置文本框的值,btnStop用于停止这些线程。

窗体后台代码如下:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- namespace WindowsApplication1
- {
- public partial class FormSafeTextBox : Form
- {
- public FormSafeTextBox()
- {
- &nbs

在多线程的WinForm应用中,非UI线程无法直接更新UI控件。通过反射和Control.Invoke方法,可以在安全的环境中改变控件如textbox的属性。示例代码展示了如何在不同线程中更新文本框的值。
最低0.47元/天 解锁文章
622

被折叠的 条评论
为什么被折叠?



