在生成一个线程的时候,需要用ThreadStart先生成代理。请看下面两行代码:---------------------------------------------------------------Program One.TestClass tc = new TestClass();Thread t1 = new Thread(new ThreadStart(tc.Run));
Thread t2 = new Thread(new ThreadStart(tc.Run));---------------------------------------------------Program Two.TestClass tc = new TestClass();ThreadStart ts = new ThreadStart(tc);Thread t1 = new Thread(ts);
Thread t2 = new Thread(ts);------------------------------------------------------------请问上面两段程序有什么不同???

解决方案 »

  1.   

    一样呀,怎么了?
    你要开新的线程,当然要new ThreadStart对象。
      

  2.   

    我这个问题难道描述的不清楚吗??
    请大家再看看代码一和代码二的不同之处。我的代码一是两个线程都new ThreadStart,而代码二是两个线程使用同一个ThreadStart对象。如果向上面的朋友说的是一样的,那么意思就是说,
    当多次new ThreadStart(tc.Run)时总是返回同一个ThreadStart对象。
      

  3.   

    ThreadStart只是一个委托,你把代码二编译,看看能通过吗?
      

  4.   

    第一个线程是委托到了tc.Run()函数,第二个线程定位到了tc类,我感觉第二个可能有点问题吧!
      

  5.   

    one:
    建立2个委托,给每个委托分别加了一个方法。
    two:
    建立一个委托,在这个委托上加了2个一样的方法。应该是这样,所以第2个相当于只加了一个。
      

  6.   

    上面两段的效果是一样的,因为只有一个
    TestClass tc = new TestClass();
    而两个thread
    t1 和 t2 都是要运行 tc.Run() 这段程序,
    就是说tc 这个 TestClass 的实例里面的状态是这两个thread 共享的
      

  7.   

    如果像楼上所说,那么我不必要每次都要new一个新的ThreadStart对象,那样的话还浪费资源,不如reuse一个ThreadStart对象,这样的说法正确吗??这里更正一下Program Two。ThreadStart ts = new ThreadStart(tc.Run);明白的人一眼就能看出错误。
      

  8.   

    效果是一样的,
    这个说得对
    one:
    建立2个委托,给每个委托加了同一个对象实例的同一个方法。这两个委托本身就相同。
    two:
    建立一个委托,在这个委托上加了一个对象实例的一个方法。
      

  9.   

    如果像楼上所说,那么我不必要每次都要new一个新的ThreadStart对象,那样的话还浪费资源,不如reuse一个ThreadStart对象,这样的说法正确吗??
    =================================================
    delegate 其实只是一个function pointer, 你把一个ThreadStart指向一个特定的实例里面的一个method(tc.Run), 然后的确可以重复使用它要看具体情况,这是不是你想得到的效果
    比如说你有很多个 tc1,tc2..tc9, 每个都有不同的状态,都需要运行Run method, 那你就要定义不同的ThreadStart 指向不同的实例
      

  10.   

    SimerJoe(浪月)说的不对吧,程序二只是建立了一个委托,在这个委托上也只加了一个方法,然后两个线程复用这个ThreadStart委托。
      

  11.   

    我的理解是
    program 1:
            建立了两个ThreadStart对象,但是Delegate了同一个function.
            最后两个不同的ThreadStart初始化了两个不同的Thread。
            两个Thread运行的时候run同一个functionprogram 2:
            建立了一个ThreadStart对象,并Delegate了一个function
            这个ThreadStart初始化了两个不同的Thread.
            两个Thread运行的时候run同一个function运行结果是一样的,这个毫无疑问。区别么就是两个delegate和一个delegate的区别。没啥,我举个相同的例子就知道了program 1:const int f=1;
    int a=f;b=f;
    printf(a);printf(b);
    program 2:const int f=1
    int a=f;
    printf(a);printf(a);
      

  12.   

    个人认同上面的看法,结果肯定是一样的,至于对资源的开销,可能在.netframework的底成是一样的,个人看法,大家指点!
      

  13.   

    jamesfay(James Fay)所说的和我的想法还是很相似的。