一旦线程被实例化,是否可以将线程重新分配给不同的方法。如果没有,有没有其他选择?
发布于 2010-02-16 18:18:02
除非线程已经启动,否则你可以使用反射,但这样做的用处非常值得怀疑。为什么不创建一个不同的线程实例:
var thread = new Thread(Method1);
thread
.GetType()
.GetMethod("SetStartHelper", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(thread, new object[] { new ThreadStart(Method2), 0 });
thread.Start();发布于 2010-02-16 18:22:34
除非你正在使用调试API做一些奇怪的事情,或者托管CLR并玩弄内部机制,否则不可能将线程‘重新分配’给一个新方法,因为这将涉及到操纵线程的堆栈。
你能做的就是在你的线程上使用一个命令模式,向它发送可能会随时间变化的工作“有效负载”:
Action worker=null;
bool running = true;
var t = new Thread(() =>
{
while(running)
{
Action theWorker = worker;
if(theWorker!=null)
{
theWorker();
}
Thread.Sleep(10);
}
});
worker = new Action(() => Console.WriteLine("hi mum"));
t.Start();
Thread.Sleep(100);
worker=new Action(()=>Console.WriteLine("I can see my house from here"));
Thread.Sleep(100);
running = false;https://stackoverflow.com/questions/2272005
复制相似问题