[英]What thread will these event callbacks occur on?
new System.Threading.Thread(() =>
{
var myObject = new CustomObject();
myObject.SomeEvent += SomeMethod;
}).Start();
第1部分:假设我在winforms应用程序中的主UI线程上运行上面的代码。 哪个Thread
会调用SomeMethod
? 它们是否会出现在我创建对象时创建的同一个Thread
上?
第2部分:使用Visual Studio 2010,我如何自己解决这个问题? 我不知道你在哪里找到Thread
运行的东西。
事件处理程序SomeMethod
将在引发事件的任何线程上运行。
您可以在事件处理程序SomeMethod
设置断点并查看“ 线程”窗口 (您可能希望为线程提供有意义的名称以查找它们)。
要找出当前正在执行的线程,可以使用Thread.CurrentThread.ManagedThreadId
。
回答你的问题:SomeMethod将在引发事件的线程中执行。
在您的情况下,它实际上永远不会执行,因为您将方法分配给事件但从未实际引发事件。
您可以查看ManagedThreadId属性http://msdn.microsoft.com/en-us/library/system.threading.thread.managedthreadid.aspx
@Mike这是样本
Console.WriteLine("Main New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
new System.Threading.Thread(() =>
{
Console.WriteLine("Inside New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
}).Start();
Console.WriteLine("Main New Thread : {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
只是想添加一个简单的测试,它将允许您检查处理程序执行的线程:
class Test
{
delegate void update();
static event update updateEvent;
static void Main(string[] args)
{
Console.WriteLine("Parent thread: " + Thread.CurrentThread.ManagedThreadId);
updateEvent += new update(Test_updateEvent);
var t = new Thread(
() =>
{
Console.WriteLine("Child thread: " + Thread.CurrentThread.ManagedThreadId);
updateEvent();
});
t.Start();
t.Join();
}
static void Test_updateEvent()
{
Console.WriteLine("Event thread: " + Thread.CurrentThread.ManagedThreadId);
}
}
打印:
Parent thread: 1
Child thread: 3
Event thread: 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.