2012-05-25 60 views
2

我是线程新手,所以请原谅我,如果我的问题是在业余水平。下面的例子是我想要做的简化版本。这工作如果方法去静态,我希望它在Go不是静态时工作。我如何使它工作。C#线程困难

using System; 
using System.Threading; 
using System.Diagnostics; 



public class ThreadPoolExample 
{ 
    static void Main() 
    { 

      for (int i = 0; i < 10; i++) 
      { 

       ThreadPool.QueueUserWorkItem(Go, i); 
      } 
      Console.ReadLine(); 



    } 

    void Go(object data)  
    { 

     Console.WriteLine(data); 
    } 
} 

如果有人可以做这个工作,并添加一个通知,所有线程已经完成执行,那将是非常棒的。

回答

5

我怀疑它与Go是静态的还是不相关,而是你不能从静态的“Main”调用/使用实例方法“Go”。无论哪种都需要是静态的,或者你需要调用/像你的类的实例使用Go:

ThreadPool.QueueUserWorkItem(value => new ThreadPoolExample().Go(value), i); 
+1

嗯,是的,除了你的(正确的)解决方案* *实际上与'Go'是静态的。 ;) –

4

做,在这种方式

class ThreadPoolExample 
{ 
     static void Main(string[] args) 
    { 

     for (int i = 0; i < 10; i++) 
     { 
      ThreadPoolExample t = new ThreadPoolExample(); 
      ThreadPool.QueueUserWorkItem(t.Go, i); 

     } 
     Console.ReadLine(); 
    } 

    void Go(object data)  
    { 

     Console.WriteLine(data); 
    } 

}