解决方案 »

  1.   

    你那个用委托没必要,
    给你举个例子吧 你有一个线程用于循环处理数据后绑定gridview的值 直接绑定肯定不行 这个时候就需要用委托绑定了
      

  2.   

    从数据结构来说,委托里是函数的入口地址。从设计来说,委托是对功能性的一个约定。用写一个排序函数来说,if(a>b)这句就是具体的调用,而一个a和b不是一个直接可以比较的数值或字符,你的函数就会失效.但在这里,if(a>b)这句从功能型来说,就是传入a和b,a>b你就给我返回true,这就是你所需要的,具体怎么比你不需要知道.因此你把它抽象为一个Func<objct,object,bool> compare(参数为两个object,返回值为bool)的委托,同时在排序中改为if(compare(a,b))。如此一来,你这个函数里的比较方式面对的就是比较器的抽象,面对任何数据类型,你都不需要改动源码.用生活来说,楼主你是老板,要买一杯咖啡,你的需要就是有一杯咖啡递到你面前,让你能喝,至于这杯咖啡是人还是鬼,是怎么弄来的,你都不要关心。
      

  3.   

    不要把委托和线程混在一起,只是多线程操作UI时,需要用到委托来解决,而委托能解决的问题远不止这个。如Linq用是就是各种委托。
    如果要解释多线程更新UI个人认为可以这样理解:多个线程不能同时更新UI就如同两个人不能同时相向面行地走直钢丝绳,因这样两个都会掉下去,因此我们就把如何走钢丝绳的方式(委托)告诉每一个人,当确定不会出现两个人同时相向而行时(系统线程调度到创建UI的线程时),就按照预先给的方式(委托)走下去就行了。
    委托在.Net的应用非常多,如Linq,你的例子比较单调,因此不知道他有什么用。
    如:你有一个方法,会给出两个参数,并返回一个整数值(像你的例子),但不明确这两个参数要如何运算的,什么都有可能,不可能预先确定的。这个时用委托就会比较简单,当然也可以其他办法如接口;   private void Call(int a, int b, Func<int, int, int> fun)
            {
                int value = fun(a, b);            if (value > 1000)
                {
                    //Save1
                }
                else
                {
                    //Save2
                }
            }   private void test()
            {
                this.Call(1, 2, (a, b) =>
                {
                    return a + b;
                });            this.Call(1, 2, (a, b) =>
                {
                    return a - b;
                });            this.Call(1, 2, (a, b) =>
                {
                    return a * b;
                });            this.Call(1, 2, (a, b) =>
                {
                    return a / b;
                });            this.Call(1, 2, (a, b) =>
                {
                    return a + b - 1;
                });
            }
      

  4.   

    (
    class Program
        {
            delegate int mydelegate(int x, int y);
     
           static int Add(int x,int y)
            {
                return x+y;
            }
           private static void Call(int a, int b, Func<int, int, int> fun)
            {
                int value = fun(a, b);
                Console.WriteLine(value);
              }        static void Main(string[] args)
            {
               Call(2, 2, (a, b) =>
                {
                    return a * b;
                });           Call(1,3,Add);
            }
        }
      

  5.   

    俺理解,delegate主要是对外,内部用就是多个线程(也算是对外);