2009-04-18 5 views
0

.NET에서 ThreadPool에 약간 익숙합니다. 하나의 객체 만 콜백 메소드에 보낼 수 있다면 어떻게 클래스 멤버 변수에 액세스하여 메소드를 호출 할 수 있을지 궁금합니다. (CallBack()의 ​​customClass 참조)ThreadPool 및 멤버 변수를 처리하는 방법은 무엇입니까?

customClass에서 데이터를 어떻게로드합니까? customClass를 다른 CallBack 메서드에 전달합니까? 이 접근법은 괜찮습니까?

실제로 볼 수 있듯이 약간의 경험이 없으므로 길을 따라가는 모든 정보가 정말 만족 스러울 것입니다.

이 KAVE

class Program 
      { 
       static void Main(string[] args) 
       { 
        CustomClass customClass = new CustomClass(); 

       ThreadPool.QueueUserWorkItem(CallBack, "Hello"); 


       Console.Read(); 
      } 

      private static void CallBack(object state) 
      { 
       customClass.SaveData(state.ToString()); 
      } 
     } 

답변

2
class Program 
{ 
    static void Main(string[] args) 
    { 
    CustomClass customClass = new CustomClass(); 
    ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello")); 
    Console.Read(); 
    } 

    private static void CallBack(CustomClass custom, string text) 
    { 
    customClass.SaveData(text); 
    } 
} 
+0

좋은 샘플이지만 SaveData에 대한 호출은 실제로 SaveData (텍스트) 여야합니다 - 복사/붙여 넣기 나머지, 분명히 ;-) –

+0

와우 아주 좋은 예! .NET 3.5에서는 매개 변수로 객체를 갖는 CallBack 메소드가 더 이상 필요하지 않습니다. 또한이 문제에 대한 .NET 2.0 솔루션을 매우 높이 평가할 것이므로 두 가지 방법을 모두 알고 있습니다. 어떤 생각? – Houman

+0

.NET 2.0 세계에서 그 방식이 이루어질 것이라는 생각이 들었습니다. ThreadPool.QueueUserWorkItem (delegate {CallBack (customClass, "World");}); – Houman

1

에게,이 작업을 수행하는 가장 쉬운 방법을 주셔서 감사합니다 (즉, 익명 메서드 또는 람다 표현식을 사용) 당신이 원하는 모든 변수를 캡처하기 위해 closure을 사용하는 것입니다. 당신은 당신이 루프를 사용하는 경우 캡처 정확히 무엇인지에 대해주의해야하지만, 물체를 통과하고 오른쪽 유형에 다시 캐스팅하는 것보다보다 간편한이다 등이었다 무엇 외에도

+0

클로저가있는 루프에서주의를 기울여야하는 이유는이 질문에서 다룹니다. http://stackoverflow.com/questions/271440/c-captured-variable-in-loop –

1

말했다 : CustomClass 당신의 통제하에 비동기 SaveData를 호출하는 것은 일반적인 사용 사례의 경우, 당신은 SaveDataAsync 방법을 제공에 대해 생각할 수 :

class CustomClass { 

    public void SaveDataAsync(string path) { 
     ThreadPool.QueueUserWorkItem(state => this.SaveData(path)); 
    } 

    public void SaveData(string path) { 
     ... 
    } 
} 

the Event-based Asynchronous Pattern를 참조하십시오.

+0

그게 아주 좋은 팁. 고맙습니다. – Houman

관련 문제