int tmp = 0;
private void btnqd_Click(object sender, EventArgs e)
{
    ThreadStart threadStart = new ThreadStart(Calculate);//解析线程
    Thread thread = new Thread(threadStart);
    thread.Start(); //启动新线程
    ThreadStart ts2 = new ThreadStart(xk);//写库线程
    Thread t2 = new Thread(ts2);
    t2.Start();
}public void Calculate()
{
    tmp = getid();
    if (tmp == 1)
    {
      //如何调用写库线程呢???
    }
    else if (tmp==2)
    {    }
}public void xk()
{
    if (tmp != 0)
    {
       //写库操作
    }  
}在Calculate方法中,如何在//处调用写库线程呢?

解决方案 »

  1.   

    应该使用变量,解析线程给变量赋值,写库线程在解析线程赋完值后进行写库操作,可以使用AutoResetEvent控制线程的同步(只有解析线程赋完值后在执行写库线程进行写库操作)。
      

  2.   

    你这样好象有问题.  tmp = getid(); 如果第一个线程此方法取到的是3;  那么第一个线程的后面语句不会运行. 第二个线程运行后也不一定会执行if语句内的语句. 因为线程的顺序是不固定的.