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

为什么没有见到多线程带来的效果?
多线程的初学者。以下是我的C#程序中用子线程显示LED屏幕信息的代码片段:

thread_LED = new Thread(new ThreadStart(showLEDMsg)); //创建一个线程
thread_LED.Start(); //启动当前线程

private void showLEDMsg()
{
  this.Invoke(new delegate_LED(showLED)); //也试过this.BeginInvoke(new delegate_LED(showLED));
}

private void showLED()
{
  System.Threading.Thread.Sleep(5000);//延时5秒钟(模拟耗时的工作)
  //showLEDMsg(0, msg, ""); //LED屏显示信息

  thread_LED.Abort(); //关闭线程
}

最后一个函数是让LED屏幕显示文本信息的,我这里先用一个延时语句代替。原本使用多线程的好处是不让主线程卡,可我运行后发现,主线程仍然会卡,一定要等到子线程5秒钟之后界面的控件(如comboBox等)才好使,问题出在哪儿呢?谢谢!

------解决方案--------------------
Invoke是同步的,把Sleep去掉
------解决方案--------------------
Invoke应该去更新界面,还是在UI线程上操作
你的Sleep不应该再invoke里面,耗时间也不应该耗在在更新界面里面
------解决方案--------------------
private void showLEDMsg()
{
//放在这里,showLed的去掉。
System.Threading.Thread.Sleep(5000);//延时5秒钟(模拟耗时的工作)
  
this.Invoke(new delegate_LED(showLED)); //也试过this.BeginInvoke(new delegate_LED(showLED));
}


------解决方案--------------------
探讨

private void showLEDMsg()
{
//放在这里,showLed的去掉。
System.Threading.Thread.Sleep(5000);//延时5秒钟(模拟耗时的工作)

this.Invoke(new delegate_LED(showLED)); //也试过this.BeginInvoke(new delegate_LED(showLE……