【发布时间】:2016-02-19 09:36:11
【问题描述】:
我一直在尝试停止与 port.Stop 和 port.Dispose() 的串行通信,但通信一旦建立就不会停止。
这是我的代码
Start 方法持续发送数据直到端口打开
public void Start(List<byte> RGBdata)
{
if (!m_port.IsOpen)
{
m_port.Open(); -- it fails over here when reloaded
}
do
{
Break();
Thread.Sleep( 5 );
m_port.Write( new byte[] { 0 }, 0, 1 );
SendData(RGBdata);
Thread.Sleep( 1);
}
while (m_port.IsOpen());
}
破解方法
private void Break()
{
m_port.BreakState = true;
Thread.Sleep( 1 );
m_port.BreakState = false;
}
发送数据方法
private void SendData(List<byte> data)
{
m_port.Write( data.ToArray(), 0, data.Count );
}
停止方法
public void Stop()
{
m_port.Close();
if (m_port.IsOpen)
{
m_port.Close();
m_port.Dispose();
}
}
【问题讨论】:
-
您的代码存在一些问题。你能把
SendData和Break的代码也贴出来吗? -
您的计时机制
Thread.Sleep 1 and 5的值非常低。通常Thread.Sleep的分辨率约为 30 毫秒。 -
这段代码中没有多线程。你确定你在使用多个线程吗?如果不是
while (m_port.IsOpen());将永远是真的。作为旁注,最好举起旗帜来表示停止。 -
是的,这就是我的问题,我有两个按钮开始和停止功能。在启动按钮上,它开始通信并永远循环。所以即使在停止点击它也不会停止通信,因为它不会进入 while 循环,一旦建立
-
还有一件事 Stefan,为什么停止命令不起作用并处理,我的意思是无论状态如何,它都应该停止通信
标签: c# .net multithreading serial-port serial-communication