C# 委托在线程与UI界面之间的应用
2013-09-03 15:55
183 查看
前景:我们在使用线程的时候,经常会想要访问到Form窗体的控件,也就是线程与UI界面交互,但是他们隶属于连个不同的线程,所以是不能直接访问的,这个时候我们就可以通过委托来实现。打个比方,你想要给远方的朋友邮一封信,你肯定不会直接跑过去给他,这个时候你就会委托邮递员送过去,就类似我们程序中的委托。
先看一个例子:
//我在线程中定时把label1的值赋值为“ABC”
private void button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(o => dosomething()); //此处使用线程池,当然也可以使用线程
}
private delegate void MyDelegate();
private void dosomething()
{
A a = new A(label1,"ABC"); //label1为从工具箱拖动出来的Label控件
this.BeginInvoke(new MyDelegate(a.B));
}
public class A //委托传递参数,通过类来实现
{
private string str_text;
private Label lbl;
public A(Label _lbl, string _text)
{
str_text = _text;
lbl= _lbl;
}
public void B()
{
lbl.Text=str_text;
}
}
先看一个例子:
//我在线程中定时把label1的值赋值为“ABC”
private void button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(o => dosomething()); //此处使用线程池,当然也可以使用线程
}
private delegate void MyDelegate();
private void dosomething()
{
A a = new A(label1,"ABC"); //label1为从工具箱拖动出来的Label控件
this.BeginInvoke(new MyDelegate(a.B));
}
public class A //委托传递参数,通过类来实现
{
private string str_text;
private Label lbl;
public A(Label _lbl, string _text)
{
str_text = _text;
lbl= _lbl;
}
public void B()
{
lbl.Text=str_text;
}
}
相关文章推荐
- c#非委托方式在子线程里操作UI控件(实际上运算逻辑在子线程,更新还是在主线程,解决了UI界面无响应的问题)
- C# 委托高级应用----线程——创建无阻塞的异步调用(一)
- 委托与事件的简单应用(不同控件之间的控制及参数传递,C# VB)
- C#编程应用--线程与委托
- C# 委托高级应用----线程——创建无阻塞的异步调用(二)
- C# Stream 和 byte[] 之间的转换(文件流的应用)
- 关于C#多线程之一——异步委托
- 多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- [原] C# 3.0的委托(delegate)及Lambda表达式应用实例
- C# 多线程编程 - 使用委托创建线程
- C#/.NET中委托和事件的机制和应用
- C# 委托应用总结
- c# wpf 通过线程和委托制作时间控件
- c#还有一点不太明白,既然开启了线程为何还要委托呢?
- C# 中的委托和事件 分类: .NET 接口+泛型+委托+继承 2011-08-30 10:09 20人阅读 评论(0) 收藏 举报 引言 委托 和 事件在 .Net Framework中的应用非
- C# 委托应用总结
- c# 控件文本通用代理委托设置,解决不同线程间设置控件问题
- C#利用委托跨线程更新UI数据
- C# 委托与事件简单应用
- C#线程之间操作无效|不允许访问控件(c# 线程间操作无效: 从不是创建控件“”的线程访问它)