2011-04-26 3 views
0

나는 그것을 컴파일하려고 객체 참조가 비 정적 필드, 메서드 또는 속성 'ConsoleApplication1.Program.print (문자열)'의 ConsoleApplication1 \의 ConsoleApplication1 \ 프로그램에 필요한 저ThreadPool.QueueUserWorkItem을 비 정적 메서드와 함께 사용하는 방법?

에게 오류 일 수 있습니다. cs 15 47 ConsoleApplication1

따라서 printstatic으로 표시하고 작동합니다. 그러나 더 큰 프로그램에서는 정적이 아닌 메서드를 사용합니다. 그렇다면이 방법들과 함께 ThreadPool을 어떻게 사용합니까?

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

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

답변

3

당신은 단지에 작동하는 인스턴스가 필요합니다

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

당신이 구현 IDisposable (또는 다른 정리 메커니즘)을 사용하는 유형, 당신은 당신이 때까지 Dispose를 호출하지하는 경우는 것을 명심하십시오 비동기 작업이 완료되었는지 (또는 비동기 작업 자체가 끝날 때) 확실합니다.

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);  
    } 
} 
관련 문제