c 输出换行:C#之多线程Invoke方法实例详解-程序开发-红黑联盟
来源:百度文库 编辑:偶看新闻 时间:2024/05/11 23:50:53
C#之多线程Invoke方法实例详解
文章录入:王子 责任编辑:7747.Net 38
【字体:小大】
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。
再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..
using System.Threading;
public delegate void MyInvoke(string str);
private void btnStartThread_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWord));
thread.Start();
}
public void DoWord()
{
MyInvoke mi = new MyInvoke(SetTxt);
BeginInvoke(mi,new object[]{"abc"});
}
public void SetTxt(string str)
{
txtReceive.Text = str System.Environment.NewLine;
}
文章录入:王子 责任编辑:7747.Net 38
【字体:小大】
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而已,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。
再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..
using System.Threading;
public delegate void MyInvoke(string str);
private void btnStartThread_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWord));
thread.Start();
}
public void DoWord()
{
MyInvoke mi = new MyInvoke(SetTxt);
BeginInvoke(mi,new object[]{"abc"});
}
public void SetTxt(string str)
{
txtReceive.Text = str System.Environment.NewLine;
}
C#线程使用实例??
C#项目开发实例
c#写一个监听线程
C#.NET实例详解软件
Visual Studio2003中c#代码详解
在哪里可以下C#实例代码
invoke歌词
用C#写方法
迅雷修改线程的方法
线程同步的方法有哪几种?
如何结束线程的方法?
C#问题?(学习C#的方法)
请JAVA高手给我讲解一下invoke()这个方法是什么意思
C#中的this关键字到底是什么,怎么用?求详解
C#中怎么获起正在运行的窗体实例
谁能通俗的讲讲什么是 C# 实例化
如何用C#连接到本地SQL Server 2005实例
ancengine的C#实例代码在哪儿能找到?
回归分析方法应用实例
C#连接oracle的方法
术士天赋加点方法及详解
战士的天赋加点方法及详解?
求管理小型企业的具体方法实例
C# 如何在某个线程起动后触发一个事件(thread.start 触发事件)