能否停供一个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#代码,很丑,
什么叫不能拖动?
常规做法应该创建一个线程用于接收(还可以创建专门处理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();
}
} 谢谢!这个下位机的延时相似了! xiangxiadage 发表于 2012-3-31 12:15 static/image/common/back.gif
什么叫不能拖动?
常规做法应该创建一个线程用于接收(还可以创建专门处理UI的线程),在那里Sleep。主进程 ...
我指的是上位机的界面不能拖动!谢谢你的回答! 感激涕零,谢谢楼主的好贴
页:
[1]