1:两者的实现原理是相同的吗?异步委托是不是通过多线程实现的?
2: 2者在使用上有什么优缺点?
3: 我应该在什么情况下使用异步委托?什么情况下使用多线程?

解决方案 »

  1.   

    这两个东西不能比的。多线程的时候,如果需要在子线程内调用控件,那么要用到委托,子线程内不可以直接操作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);   
                }   
            }   
        }   
    }  
      

  2.   

    1.异步请求一般用在IO等耗时操作上,他的好处是函数调用立即返回,相应的工作线程立即返还给系统以供重用。由于系统的线程资源是非常宝贵的,通常有一定的数目限制,如.net默认是25。若使用异步方式,用这些固定数目的线程在固定的时间内就可以服务更多的请求,而如果用同步方式,那么每个请求都自始至终占用这一个线程,服务器可以同时服务的请求数就少了。当异步操作执行完成后,系统会从可用线程中选取一个执行回调程序,这时的这个线程可能是刚开始发出请求的那个线程,也可能是其他的线程,因为系统选取线程是随机的事情,所以不能说绝对不是刚开始的那个线程。多线程是用来并发的执行多个任务。
    (注:摘自http://www.itwenku.com/net/5/21930.htm),请达人们给菜鸟解惑.谢谢
    .         2.NET系统提供的多线程机制ThreadPool就是帮助你简化这些线程控制细节的,而几乎所有的.NET异步编程都是通过ThreadPool实现的。(摘自知秋一叶)
              3.线程池的实现方法与线程是不一样的.初始化时在线程池里的线程为0.当进程需要一个线程时,创建一个线程,由此线程执行用户的方法.需要注意的是,此线程执行完后并不立即销毁,而是挂起等待,如果有其他方法需要执行,回唤醒进行处理.只有当它等到40秒(没有官方记录,有可能是其它数字)还没有任务执行时才唤醒自己,并销毁自己,释放资源.当然,如果线程池中的线程不够处理任务时,会再次创建一个新线程进行执行.
      

  3.   

    多线程编程(4):多线程与UI操作
    本篇主要讲述了使用线程操作Windows应用程序界面的方法,这些方法在编写多线程的UI程序时可以参考。由于在.NET中不允许直接在多线程环境下操作界面UI上的属性,因此需要采用其它办法,本篇就是讲述本人在实际开发中所用到的一些方法。