zhikunWang 发表于 2012-3-30 14:10:54

能否停供一个C#编写编程器的上位机代码

小弟刚学C#,多线程和委托不懂,所以编写编程器软件很费力。
编程器使用串口上下位机通讯,处理串口接收数据超时,由于使用了Thread.Sleep(100),发现上位机串口在执行时,不能拖动。
bool received_flag = false;
while(true)
{   
byte time_counter=0;
   Thread.Sleep(100);//延时100ms
   if(++time_counter>=20)
    {
       time_counter=0;
      for (int i = 0; i < 3; i++)
      {                                         
         Console.Beep(3000, 100);
          Thread.Sleep(200);//延时200ms
         }       
         StatusTextBox.Text = "超时!";                               
         break;
   }
else
{
if(received_flag ==true)//串口接收到数据
{
//未超时处理;
}
}
}
附上我的上位机界面图片:

我是写下位机,不要见笑我了。附上我的C#代码,很丑,

xiangxiadage 发表于 2012-3-31 12:15:29

什么叫不能拖动?
常规做法应该创建一个线程用于接收(还可以创建专门处理UI的线程),在那里Sleep。主进程/线程负责管理其他线程。

如果你在主线程里Sleep了,那么进程是不能响应外部操作。

或者使用其他方法来延时:
下面来自网络,未验证:using System.Runtime.InteropServices;



static extern uint GetTickCount();



static void Delay(uint ms) {
    uint start = GetTickCount();
    while (GetTickCount() - start < ms) {
      Application.DoEvents();
    }
}

zhikunWang 发表于 2012-3-31 15:29:52

谢谢!这个下位机的延时相似了!

zhikunWang 发表于 2012-3-31 15:31:48

xiangxiadage 发表于 2012-3-31 12:15 static/image/common/back.gif
什么叫不能拖动?
常规做法应该创建一个线程用于接收(还可以创建专门处理UI的线程),在那里Sleep。主进程 ...

我指的是上位机的界面不能拖动!谢谢你的回答!

农家御品8 发表于 2012-4-7 13:20:03

感激涕零,谢谢楼主的好贴
页: [1]
查看完整版本: 能否停供一个C#编写编程器的上位机代码