多线程的初学者。以下是我的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等)才好使,问题出在哪儿呢?谢谢!
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等)才好使,问题出在哪儿呢?谢谢!
这里是用this.Invoke(new delegate_LED(showLED))好呢还是用this.BeginInvoke(new delegate_LED(showLED));好呢?
你的Sleep不应该再invoke里面,耗时间也不应该耗在在更新界面里面
{
//放在这里,showLed的去掉。
System.Threading.Thread.Sleep(5000);//延时5秒钟(模拟耗时的工作)
this.Invoke(new delegate_LED(showLED)); //也试过this.BeginInvoke(new delegate_LED(showLED));
}
private void showLEDMsg()
{
thread_LED = new Thread(new ThreadStart(showLEDMsg)); //创建一个线程
thread_LED.Start(); //启动当前线程
}private void showLED()
{
System.Threading.Thread.Sleep(5000);//延时5秒钟(模拟耗时的工作)
showLEDMsg(0, msg, ""); //LED屏显示信息
}
试试看这个
改成以下语句果然不卡了,如:
thread_LED = new Thread(new ThreadStart(showLEDMsg)); //创建一个线程
thread_LED.Start(); //启动当前线程private void showLEDMsg()
{
System.Threading.Thread.Sleep(5000);//延时5秒
thread_LED.Abort(); //关闭线程
}但是如果将延时语句换成以下真正的LED显示大屏的代码还是照卡不误,Why?
private void showLEDMsg()
{
StringBuilder sb = new StringBuilder(" ");
string msg = "xxxxxxx管理系统." + sb;
string msg1 = "正在处理中";
showLEDMsg(0, msg, msg1, "");
thread_LED.Abort(); //关闭线程
}