Как использовать ThreadPool.QueueUserWorkItem с нестатическими методами? - PullRequest
1 голос
/ 26 апреля 2011

Когда я пытаюсь скомпилировать, это дает мне

Ошибка 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 ]

3 голосов
/ 26 апреля 2011

Вам просто нужен экземпляр для работы:

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

Имейте в виду, что если используемый вами тип реализует IDisposable (или какой-либо другой механизм очистки), вы не должны вызывать Disposeпока вы не уверены, что асинхронная операция завершена (или в конце самой асинхронной операции).

2 голосов
/ 26 апреля 2011

Чтобы вызвать нестатический, вам нужен экземпляр. Например, в вашей программе это будет работать:

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