一旦实例化了线程,是否可以将线程重新分配给其他方法。如果没有,有其他选择吗?
答案 0 :(得分:2)
除非线程已经启动,否则你可以使用反射,但这种东西的用处非常值得怀疑。为什么不改为创建不同的线程实例:
var thread = new Thread(Method1);
thread
.GetType()
.GetMethod("SetStartHelper", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(thread, new object[] { new ThreadStart(Method2), 0 });
thread.Start();
答案 1 :(得分:1)
除非你使用调试API或托管CLR并使用内部函数进行一些奇怪的事情,否则线程无法被“重新分配”给新方法,因为这会涉及操纵线程的堆栈。 / p>
你可以做的是在你的线程上使用一个命令模式来发送它可以及时改变的工作'有效负载':
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;