2011-12-14 2 views
0

나는이맞춤 이벤트를위한 스레드 컨텍스트?

MyClass Foo = new MyClass() 
Foo.OnSomeEvent += new SomeEvent(Foo_SomeEvent); 
ThreadPool.QueueUserWorkItem(Foo.MyMethod, SomeParams); 

내 질문 같은 일부 코드가 OnSomeEvent 해고하고이 방법의 Foo_SomeEvent가 호출 될 때,이 스레드에서 스레드의 컨텍스트에서 실행된다는 것입니다 아니면 내가이를 queing하고 어디는 스레드가 ThreadPool의 항목?

답변

3

Foo.MyMethod이 이벤트를 트리거하면 Foo.MyMethod이 풀의 스레드에서 실행되므로 이벤트 콜백도 풀의 스레드에서 실행됩니다. 이 확인하기 쉬운 : 내 콘솔

public class MyClass 
{ 
    public EventHandler OnSomeEvent; 
    public void MyMethod(object state) 
    { 
     OnSomeEvent(null, null); 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     Console.WriteLine(
      "main thread id: {0}", 
      Thread.CurrentThread.GetHashCode() 
     ); 

     MyClass Foo = new MyClass(); 
     Foo.OnSomeEvent += new EventHandler(Foo_SomeEvent); 
     ThreadPool.QueueUserWorkItem(Foo.MyMethod, null); 
     Console.ReadKey(); 
    } 

    static void Foo_SomeEvent(object sender, EventArgs e) 
    { 
     Console.WriteLine(
      "Foo_SomeEvent thread id: {0}", 
      Thread.CurrentThread.GetHashCode() 
     ); 
    } 
} 

인쇄 : 증명 그것에

main thread id: 1 
Foo_SomeEvent thread id: 3 
+0

좋은 예. 감사 –

관련 문제