C# this.Invoke()的作用与用法
来源:互联网 发布:红警3起义时刻兵种数据 编辑:程序博客网 时间:2024/05/17 04:59
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。
this.invoke()用法:
(1)
//修改按钮的Enabled属性
private void ModifyButton( bool _b )
{
this.Button1.Enabled = _b;
}
(2)
//声明上面方法的委托
private delegate void ModifyButton_dg( bool _b );
(3)
//调用委托
private void Calldelgate( )
{
/*在Windows窗体应用程序中使用this.Invoke 在WPF应用程序中使用this.Dispatcher.Invoke*/
this.Invoke( new ModifyButton_dg( ModifyButton ) ,new object[]{false});
}
(4)
可以在非UI线程中调用 ,如:
//创建线程
Thread _t = new Thread( new ThreadStart( threadmethod ));
_t.Start();
//线程入口
private void threadmethod ()
{
//其他代码省略
Calldelgate();
}
线程会在UI线程和辅助线程之间相互转换
例如:
举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..
using System.Threading;
//启动一个线程
Thread thread=new Thread(new ThreadStart(DoWork));
thread.Start();
//线程方法
private void DoWork()
{
this.TextBox1.Text="我是一个文本框"; /*在多线程中直接调用界面控件的方法是错误的做法*/
}
如果你像上面操作,在VS2005或2008里是会有异常的...
正确的做法是用Invoke\BeginInvoke
using System.Threading;
namespace test
{
public partial class Form1 : Form
{
{
InitializeComponent();
}
①//更新窗体中的TextBox1显示内容的方法
public void UpdateForm(string param1,string parm2)
{
this.textBox1.Text = param1+parm2;
}
②//声明委托
③//调用委托
private void Calldelegate()
{
/*在Windows窗体应用程序中使用this.Invoke 在WPF应用程序中使用this.Dispatcher.Invoke*/
this.BeginInvoke(new UpdateForm_dl(UpdateForm), new object[] { "我是文本框", "haha" });
//this.Dispatcher.BeginInvoke(new UpdateForm_dl(UpdateForm), new object[] { "我是文本框", "haha" });
}
④//创建新线程
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWork));
thread.Start();
}
⑤//新线程入口
public void DoWork()
{Calldelegate();
}
}
}
注意代理的使用!
- C# this.Invoke()的作用与用法
- C# this.Invoke()的作用与用法
- C# this.Invoke()的作用与用法
- C# this.Invoke()的作用与用法
- C# this.Invoke()的作用与用法
- C# this.invoke()作用 多线程操作UI
- Javascript 作用域与this的用法
- C++与C#中this的作用
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- C#中Invoke的用法
- Unity人工智能学习—躲避规则障碍一
- iOS7适配
- 有关软件开发流程以及软件习惯
- 软工文档总结
- 初窥OS段页式管理概貌
- C# this.Invoke()的作用与用法
- linux下使用yum安装mysql
- C连接交换指定符号extern “C”
- .NET 根据下拉列表选择不同的值动态改变对应textbox的属性
- SQL Server中的三种物理连接操作
- mysql密码的加密与解密
- 栈
- Java线程面试题 Top 50
- jQuery 淡入淡出