2010-02-16 69 views

回答

2

除非线程已经启动,否则你可以使用反射,但这种事情的用处是非常值得怀疑的。为什么不创建一个不同的线程实例,而不是:

var thread = new Thread(Method1); 
thread 
    .GetType() 
    .GetMethod("SetStartHelper", BindingFlags.Instance | BindingFlags.NonPublic) 
    .Invoke(thread, new object[] { new ThreadStart(Method2), 0 }); 
thread.Start(); 
+0

需要注意的是,如果这就是所谓的线程启动后,这不有什么影响 – 2010-02-16 10:26:19

+0

是的,这就是为什么我开始我的答案'除非线程已经开始...'。 – 2010-02-16 10:30:49

1

除非你正在做一些奇怪的事情与调试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; 
相关问题