2

我是线程新手,所以如果我的问题处于业余水平,请原谅我。下面的示例是我正在尝试做的简化版本。如果方法 go 是静态的,则此方法有效,我希望它在 Go 非静态时有效。我如何使它工作。

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); 
    }
}

如果有人可以完成这项工作并添加所有线程已完成执行的通知,那就太棒了。

4

2 回答 2

5

我怀疑这与 Go 是否静态无关,而是您不能从静态“Main”调用/使用实例方法“Go”。两者都需要是静态的,或者您需要在类的实例上调用/使用 Go,例如:

ThreadPool.QueueUserWorkItem(value => new ThreadPoolExample().Go(value), i);
于 2012-05-25T00:19:26.867 回答
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); 
    }

}
于 2012-05-25T00:30:42.990 回答