2
将线程重新分配给不同的方法(一旦实例化后)是否可以重新分配线程。如果没有,是否有其他选择?将线程重新分配给不同的方法vb.net
将线程重新分配给不同的方法(一旦实例化后)是否可以重新分配线程。如果没有,是否有其他选择?将线程重新分配给不同的方法vb.net
除非线程已经启动,否则你可以使用反射,但这种事情的用处是非常值得怀疑的。为什么不创建一个不同的线程实例,而不是:
var thread = new Thread(Method1);
thread
.GetType()
.GetMethod("SetStartHelper", BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(thread, new object[] { new ThreadStart(Method2), 0 });
thread.Start();
除非你正在做一些奇怪的事情与调试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;
需要注意的是,如果这就是所谓的线程启动后,这不有什么影响 – 2010-02-16 10:26:19
是的,这就是为什么我开始我的答案'除非线程已经开始...'。 – 2010-02-16 10:30:49