【发布时间】:2012-10-03 13:07:35
【问题描述】:
我在从主线程的辅助线程调用事件时遇到问题。事件处理程序不在主线程上执行。谁能给我一些关于我做错了什么的指示。
谢谢
namespace ThreadSyncExample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("MainThread: " + System.Threading.Thread.CurrentThread.ManagedThreadId);
Execute execThe = new Execute();
execThe.FinishedThread += (src, arg) =>
{
//This shoould be executed on MainThread right?
Console.WriteLine("Thread Id: " + System.Threading.Thread.CurrentThread.ManagedThreadId);
};
execThe.Run();
Console.ReadKey();
}
}
class Execute
{
public void Run()
{
Thread exec = new Thread(() =>
{
Console.WriteLine("Worker Thread : " + System.Threading.Thread.CurrentThread.ManagedThreadId);
OnFinishedThread();
});
exec.Start();
}
public event EventHandler FinishedThread;
protected virtual void OnFinishedThread()
{
if (null != FinishedThread)
{
EventArgs args = new EventArgs();
FinishedThread(this, EventArgs.Empty);
}
}
}
}
【问题讨论】:
-
您是遇到异常还是无法正常工作?
-
我没有得到异常,但是事件处理程序没有在主线程上执行。
-
我不太明白你为什么希望这个事件处理程序在主线程上执行。你没有以任何方式同步它。
-
OnFinishedThread是在副线程上执行的,主线程id是不会显示出来的
标签: c# multithreading thread-safety