2012-05-25 58 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); 
    } 

}