当我尝试编译时,它给了我
错误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);
}
}
答案 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);
}
}