如果这样的话,就直接使用异步线程吧, 用委托delegate来实现

解决方案 »

  1.   

    用委托和事件
    比如说,水壶烧水,水烧开了报警,报警触发新的动作(你把水壶里的水倒进杯子里喝)你的代码run,执行完毕后触发一个事件,事件实现你if(num=="ok"){}要做的事情
      

  2.   


    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
            string num = "";
            private void btnOK_Click(object sender, EventArgs e)
            {
                 Thread th=new Thread(new ThreadStart(run));
                  th.Start();//开始线程
                  }
            }
     
            private void run(){
                    //读取数据库的内容。省略最终渠道一个值。
                    //用MySQLData代表一个从数据库里取出来的一个值赋给num。
                    num = MySQLData;
                    this.BeginInvoke((Action) delegate{
                                           //这里怎么线程同步通过线程里取到的值进行逻辑处理
                          if(num=="ok"){
                                           };
                                });
            }
     后续操作,应该在“后续”才调用,绝不是在 btnOK_Click 执行的。在 btnOK_Click 里只要启动线程,启动要执行的方法,就立刻结束了!“取完这个值,我还想在继续在button这个主线程里处理逻辑”这是胡乱安排逻辑。
      

  3.   

    什么情况?csdn的排版功能难道又抽风了?再试一下        string num = "";
            private void btnOK_Click(object sender, EventArgs e)
            {
                 Thread th=new Thread(new ThreadStart(run));
                  th.Start();//开始线程
           }
      
            private void run(){
                    //读取数据库的内容。省略最终渠道一个值。
                    //用MySQLData代表一个从数据库里取出来的一个值赋给num。
                    num = MySQLData;
                    this.BeginInvoke((Action) delegate{
                                           //这里怎么线程同步通过线程里取到的值进行逻辑处理
                          if(num=="ok"){
                                           };
                                });
            }