这两个东西不能比的。多线程的时候,如果需要在子线程内调用控件,那么要用到委托,子线程内不可以直接操作UI上的控件的。看例子: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 WindowsApplication13 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private delegate void MoveLabel(int val);//声明代理 Thread td; private void Form1_Load(object sender, EventArgs e) { td = new Thread(new ThreadStart(ThreadFun)); td.Start(); } void SetOffset(int val) { label1.Text = "从子线程里传入的值是:" + val.ToString(); } private void ThreadFun() { if (this.InvokeRequired) { MoveLabel d = new MoveLabel(SetOffset); object[] arg = new object[] { 1 };//要传入的参数值 this.Invoke(d, arg); } } } }
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication13
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private delegate void MoveLabel(int val);//声明代理
Thread td;
private void Form1_Load(object sender, EventArgs e)
{
td = new Thread(new ThreadStart(ThreadFun));
td.Start();
}
void SetOffset(int val)
{
label1.Text = "从子线程里传入的值是:" + val.ToString();
}
private void ThreadFun()
{
if (this.InvokeRequired)
{
MoveLabel d = new MoveLabel(SetOffset);
object[] arg = new object[] { 1 };//要传入的参数值
this.Invoke(d, arg);
}
}
}
}
(注:摘自http://www.itwenku.com/net/5/21930.htm),请达人们给菜鸟解惑.谢谢
. 2.NET系统提供的多线程机制ThreadPool就是帮助你简化这些线程控制细节的,而几乎所有的.NET异步编程都是通过ThreadPool实现的。(摘自知秋一叶)
3.线程池的实现方法与线程是不一样的.初始化时在线程池里的线程为0.当进程需要一个线程时,创建一个线程,由此线程执行用户的方法.需要注意的是,此线程执行完后并不立即销毁,而是挂起等待,如果有其他方法需要执行,回唤醒进行处理.只有当它等到40秒(没有官方记录,有可能是其它数字)还没有任务执行时才唤醒自己,并销毁自己,释放资源.当然,如果线程池中的线程不够处理任务时,会再次创建一个新线程进行执行.
本篇主要讲述了使用线程操作Windows应用程序界面的方法,这些方法在编写多线程的UI程序时可以参考。由于在.NET中不允许直接在多线程环境下操作界面UI上的属性,因此需要采用其它办法,本篇就是讲述本人在实际开发中所用到的一些方法。