C# COM拒绝访问

早上好不好 2015-07-15 04:58:30
C#程序读取传感器的数据,传感器由串口连接。现在问题是,我如果在运行程序前就连接好了传感器,然后打开串口就报出“COM3拒绝访问”,然后我只要把传感器拔了重插一下,再打开就可以了。或者在程序运行前不要连接传感器,等程序打开后再连接传感器,然后打开串口也没问题。
可是这样很麻烦,每次运行程序都要重新拔插一次。我用其他串口工具就不需要这样,一直连接的情况下,任何时候打开串口都能正常收到数据。所以不知道我的程序问题在哪?


private void com_data_receive(object sender, SerialDataReceivedEventArgs e)
{
if (Closing) return;

try
{
Listening = true;
byte[] buf = new byte[24];
receive_count += 1;
COM.Read(buf, 0, 24);
COM.DiscardInBuffer();

string receive_data = "";

for (int i = 0; i < buf.Length; i++)
{
receive_data += buf[i].ToString("X2");
}
string temperature = get_temperature(receive_data.Substring(36, 4)).ToString("0.00");
string humility = get_humility(receive_data.Substring(40, 4)).ToString("0.00");
string illumination = get_illumination(receive_data.Substring(44, 4)).ToString("0.00");

this.Invoke((EventHandler)(delegate
{
ListViewItem lvi = new ListViewItem(receive_count.ToString());
lvi.SubItems.Add(temperature);
lvi.SubItems.Add(humility);
lvi.SubItems.Add(illumination);
listView1.Items.Add(lvi);
}));

}

private void button4_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem != null && comboBox2.SelectedItem != null && comboBox3.SelectedItem != null && comboBox4.SelectedItem != null && comboBox5.SelectedItem != null)
{

if (COM.IsOpen)
{
Closing = true;
while (Listening) Application.DoEvents();

COM.Close();
COM.Dispose();
Closing = false;
}
else
{
com_setting();
try
{
COM.Open();
COM.DataReceived += new SerialDataReceivedEventHandler(com_data_receive);
}
catch (Exception ex)
{
COM.Close();
COM.Dispose();
COM = new SerialPort();
MessageBox.Show(ex.Message);
}

}
button4.Text = COM.IsOpen ? "关闭" : "开始";
}
else
{
MessageBox.Show("请设置参数");
}
}

private void com_setting()
{
COM.PortName = comboBox1.Text;
COM.NewLine = "\r\n";
COM.RtsEnable = true;
COM.BaudRate = int.Parse(comboBox2.Text);
COM.DataBits = int.Parse(comboBox3.Text);
switch (comboBox4.SelectedIndex)
{
case 0: COM.Parity = Parity.None; break;
case 1: COM.Parity = Parity.Odd; break;
case 2: COM.Parity = Parity.Even; break;
case 3: COM.Parity = Parity.Mark; break;
case 4: COM.Parity = Parity.Space; break;
default: COM.Parity = Parity.None; break;
}
switch (comboBox5.SelectedIndex)
{
case 0: COM.StopBits = StopBits.One; break;
case 1: COM.StopBits = StopBits.OnePointFive; break;
case 2: COM.StopBits = StopBits.Two; break;
default: COM.StopBits = StopBits.One; break;
}


}
...全文
407 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
早上好不好 2015-07-16
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
我自己写的串口工具的源码,你参考参考
文件损坏。。
於黾 2015-07-16
  • 打赏
  • 举报
回复
另,我用VS2005编写的 用更高的版本应该都能正常打开 但是不要试图用低于2005的版本打开
於黾 2015-07-16
  • 打赏
  • 举报
回复
引用 8 楼 u010338733 的回复:
[quote=引用 4 楼 Z65443344 的回复:] 我自己写的串口工具的源码,你参考参考
文件损坏。。[/quote] 已测试,可以正常打开 可能是因为你使用了什么下载工具,导致压缩包没有下载完整 再下载一次试试
早上好不好 2015-07-15
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
我自己写的串口工具的源码,你参考参考
我先看看,谢谢
早上好不好 2015-07-15
  • 打赏
  • 举报
回复
引用 1 楼 wc_ling 的回复:
在程序打开串口的时候,先看串口状态,如果打开的可以先关闭一下在打开
我打开前判断了一下啊,我先看看你的,谢谢
wc_ling 2015-07-15
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
我自己写的串口工具的源码,你参考参考
抢生意是吧
於黾 2015-07-15
  • 打赏
  • 举报
回复
while (Listening) Application.DoEvents(); 这是要闹哪样?
wc_ling 2015-07-15
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/wc_ling/8812747 我写的,你看看吧
wc_ling 2015-07-15
  • 打赏
  • 举报
回复
在程序打开串口的时候,先看串口状态,如果打开的可以先关闭一下在打开

111,125

社区成员

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

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

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