从UI线程创建的子线程,现在子线程中需要根据用户的选择来执行不同的操作,所以如何让子线程暂停下来并等用户选择后把选择的值传入子线程因为子线程中需要的这个值要在子线程中才能确认能给用户选择什么,所以没法在线程启动前让用户选择

解决方案 »

  1.   

    用户操作UI改变某个全局值,这是前提操作。假设这个一定会发生可以这样。UI的相关代码中插入:
    Thread td = new Thread(new ThreadStart(sth()));
    td.Start();private void sth()
    {
      while(true)
      {
        //查询UI的某个变量
         if(someVar Within Condition)//伪代码,仅为了描述这个问题
         {
          break;
         }
         sleep(500); //降低CPU占用时间
      }
      //TODO:你要做的下一步事情
    }
      

  2.   

    Thread.Resume()过时了,难道只能用2楼这种轮询的方式来进行了吗  
      

  3.   

    子线程使用Monitor.Wait方法,主线程使用Monitor.Pulse方法。
      

  4.   

    轮询的方法效率很低的可以创建一个全局ManualResetEvent对象,在需要停下来等待的地方执行WaitOne,然后该线程被阻塞。
    另外一个合适的地方执行Set,然后被阻塞的线程就能够继续执行了。
      

  5.   

    用 AutoResetEvent试试看, 也是waitone和set