C#程序卡死

wl0326 2013-07-13 10:45:59
各位高手,你们好,我用C#开发了一个上位机界面,里面用到了一个定时器用来记录程序执行的时间,每隔一秒执行一次,并显示在界面中,这个定时程序一直进行,还有一个功能是通过串口不断向下位机发送和接收数据,在程序运行时,出现这样一个问题,当我发送数据结束后,有一个Thread.Sleep(时间)的停留,这个时候我会发现程序界面好像卡死了一样的情况出现,定时器也不工作了,不能实时显示运行时间,只有停留时间结束,界面又活过来了,请问这是什么情况,是不Thread.Sleep(时间)的停留这个工作让定时器也暂停工作了吗,还是别的原因,请问这种情况该如何解决,谢谢。
...全文
902 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-07-14
  • 打赏
  • 举报
回复
你如果在主线程中调用thread.Sleep()当然会堵塞主线程,建议把堵塞操作去掉,更多内容可以看看多线程的内容: http://msdn.microsoft.com/zh-cn/library/3e8s7xdd.aspx
秋枫_落叶 2013-07-14
  • 打赏
  • 举报
回复
你把那段代码在放到一个线程里面吧
wl0326 2013-07-13
  • 打赏
  • 举报
回复
我写了这么一个线程用来暂停程序,但是点击按钮后线程并没启动,这是怎么回事啊,一下是我的程序 private void button1_Click(object sender, EventArgs e) { // Thread f = new Thread(new ThreadStart(f1)); f.Start(); MessageBox.Show(""); } private void f1() { TimeStop ts = new TimeStop();//这是新添加的一个类,用于延时函数 for (int i = 0; i < 10; i++) { lock (ts.MyLockWord) { } ts.stopWay(1500); } } class TimeStop//延时类 { public TimeStop() { System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//,跨线程调用控件必加上去 } private int stopTime = 0;//暂停的时间 ThreadStart myStart; Thread TheStop; public readonly object MyLockWord = new object(); // public void stopWay(int stopTime) { this.stopTime = stopTime; myStart = new ThreadStart(this .ToStop ); TheStop = new Thread(myStart ); TheStop.Start(); } private void ToStop() { lock (MyLockWord) { Thread.Sleep(this .stopTime ); Thread.CurrentThread.Abort(); } } }
gzw13999 2013-07-13
  • 打赏
  • 举报
回复
多线程+委托
ztszhq 2013-07-13
  • 打赏
  • 举报
回复
通过多线程编程解决此问题
please_call_me_J 2013-07-13
  • 打赏
  • 举报
回复
timer是单独的线程,你的sleep写在主线程的,你的timer更新的是主线程的ui,主线程已经暂停了,更新当然不会有响应
jkffkle 2013-07-13
  • 打赏
  • 举报
回复
你用一个线程肯定会界面卡住了,最好用两个线程吧,主线程负责界面运行,副线程负责后台任务运行

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧