Если это 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