高手来!!!c#串口打开/关闭问题

sense 2005-09-20 12:10:45
不知道为什么我每次开关几次串口后就再也无法打开了,用GetLastError()查一下都是等于55。
查了一下错误列表是:The specified network resource or device is no longer available.
注:我的程序在PPC下没任何问题,在WINCE 5.0下就一直有这个问题。
还有我用EVC也做了一个版本,没有任何问题的。
public bool OpenPort(string lpFileName,int baudRate,byte parity, byte byteSize, byte stopBits)
{
// OPEN THE COMM PORT.
hComm = CreateFile(lpFileName ,GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
// IF THE PORT CANNOT BE OPENED, BAIL OUT.
if(hComm == INVALID_HANDLE_VALUE)
{
return false;
}
//SetupComm(hComm, MAXBLOCK, MAXBLOCK);

// SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
// THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
// IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
// THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
// ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
DCB dcbCommPort = new DCB();
dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.BaudRate = baudRate;
dcbCommPort.Parity = parity;
dcbCommPort.ByteSize = byteSize;
dcbCommPort.StopBits = stopBits;
dcbCommPort.fOutX=dcbCommPort.fInX=dcbCommPort.fTXContinueOnXoff=0;

SetCommMask(hComm,EV_RXCHAR);
PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_TXABORT);
if(!SetCommState(hComm, ref dcbCommPort))
{
CloseHandle(hComm);
hComm=INVALID_HANDLE_VALUE;
return false;
}

// SET THE COMM TIMEOUTS.
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
GetCommTimeouts(hComm,ref ctoCommPort);
ctoCommPort.ReadIntervalTimeout = Int32.MaxValue;
ctoCommPort.ReadTotalTimeoutConstant = 10;
ctoCommPort.ReadTotalTimeoutMultiplier = 10;
ctoCommPort.WriteTotalTimeoutMultiplier = 50;
ctoCommPort.WriteTotalTimeoutConstant = 100;
if(!SetCommTimeouts(hComm,ref ctoCommPort))
{
CloseHandle(hComm);
hComm=INVALID_HANDLE_VALUE;
return false;
}

bOpened = true;
return true;
}

public bool ClosePort()
{
if (hComm == INVALID_HANDLE_VALUE)
{
return false;
}

if (CloseHandle(hComm))
{
hComm = INVALID_HANDLE_VALUE;
bOpened = false;
return true;
}
else
{
return false;
}
}

...全文
370 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sense 2005-09-23
  • 打赏
  • 举报
回复
绝对有执行到,因为返回值都为真了,我怀疑是不是我在关闭线程后程序又读了一次串口的问题!
红牛哥110 2005-09-22
  • 打赏
  • 举报
回复
你跟踪一下,看你关闭串口的代码有没有执行到.
并且也注意一下hComm的值的变化.
samp_miao 2005-09-22
  • 打赏
  • 举报
回复
是不是哪一次忘记关闭了?
dingzhaofeng 2005-09-21
  • 打赏
  • 举报
回复
顶一下
sense 2005-09-20
  • 打赏
  • 举报
回复
没人懂吗?

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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