日期:2014-05-18  浏览次数:21029 次

高手再帮我看看吧,多线程问题
光说好像不太清楚,请高手帮我看一下代码,如果真的时Join的问题,我得马上想办法去更改先前的程序了。 
  //用多线程进行通讯测试 
  private void Test()
  { 
  //这里省略无关的代码 
   
  //用多线程进行通讯测试 
  for (int index = 0; index < m_SeiPcbas.Count; index++) 
  { 
  m_SeiPcbas[index].SetTestCondition(cmbCommand.Text, m_RepeatTimes, m_RepeatInterval, 
  new CallBackDelegate(CallBackRecord));//这里使用了回调委托来回调数据 
  Thread threadTest = new Thread(new ThreadStart(m_SeiPcbas[index].TestReadCommand)); 
  m_TestThreads.Add(threadTest); 
  } 
  } 
 private void CallBackRecord(SeiPcbaTestRecord record) 
  { 
  rtfCurrentDetails.Invoke( 
  new EventHandler( 
  delegate 
  { 
  m_NumFinished++; 
   
  //这里省略无关代码 

  if (m_NumFinished == m_NumToTest)//测试都完成了 
  { 

  tmrTest.Interval = m_TestInterval; 
  tmrTest.Enabled = true; 
  tmrTest.Start();问题在这里:测试完了启动时钟,在时钟中又调用了上面的Test()方法,当时我认为既然数据已经得到了回调数据,那么4个测试线程已经执行结束,所有没有在其他地方使用Join方法等待线程执行结束,不知道是不是就是这个原因导致第一次死机的,请高手给个答案 } 
  } 
  )); 
  }

------解决方案--------------------
帮顶!Too

------解决方案--------------------
2个贴?

------解决方案--------------------
多线程回调对我来说还是有点复杂的,刚学习c#不久,帮你顶了
------解决方案--------------------
没有结束吧? 在其他地方开始,test函数里边唤醒,完了之后就阻塞,看怎么样?
------解决方案--------------------
帮你顶顶吧

------解决方案--------------------
你是使用线程池?
线程池中可以添加相同的线程吗?感觉你代码有问题检查一下吧,代码不全不好说。