如何将ThreadPool.QueueUserWorkItem与非静态方法一起使用?

时间:2011-04-26 05:54:50

标签: c# multithreading threadpool

当我尝试编译时,它给了我

  

错误1非静态字段,方法或属性需要对象引用'ConsoleApplication1.Program.print(string)'ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 15 47 ConsoleApplication1

因此,我将print标记为static并且有效。但是在一个更大的程序中我有非静态方法。那么如何将ThreadPool与这些方法一起使用?

class Program
{
    static void Main(string[] args)
    {
        ThreadPool.QueueUserWorkItem(o => print("hello"));
        Console.ReadLine();
    }

    public void print(string s)
    {
        Console.WriteLine(s);
    }
}

2 个答案:

答案 0 :(得分:3)

您只需要一个实例来操作:

var myObject = new WhateverClassItIs();
ThreadPool.QueueUserWorkitem(o => myObject.SomeMethod("some input"));

请记住,如果您使用的类型实现IDisposable(或其他一些清理机制),则在确定异步操作已完成(或在此处)之前,不应调用Dispose异步操作本身的结束)。

答案 1 :(得分:2)

要调用非静态,您需要一个实例。例如,在您的程序中,这将使其工作:

class Program
{
   static void Main(string[] args)    
   {
       Program p = new Program();
       ThreadPool.QueueUserWorkItem(o => p.print("hello"));
       Console.ReadLine();
   }

   public void print(string s)
   {
      Console.WriteLine(s);    
   }
}