繁体   English   中英

从同一位置的两个串行端口读取

[英]Reading from two serial ports at the same

我有一个C#程序,它可以同时读取两个串行端口。 串行端口设备是一个Prolific USD to 4串行端口适配器,我将两种硬件分别插入了适配器的单独端口。 问题是,当我一次从每个端口读取一个时,一切正常,但是当我尝试同时从两个端口读取时,其中一个端口没有响应。 为了解决该问题,我启动了该应用程序的两个实例,并且能够一次从两个端口读取(每个应用程序实例一个)。 有谁知道如何同时从一个应用程序中的两个单独的串行端口读取? 谢谢。

添加一些代码:

端口1:

//按钮以开始或停止从端口1读取数据。由于硬件要求我在读取响应之前对其进行写入,因此写入操作是在计时器中完成的

    private void buttonPort1_Click(object sender, EventArgs e)
    {
        if (buttonPort1.Text == "Start Recording")
        {
            if (!port1.IsOpen)
            {
                port1.Open();
            }
            timerPort1.Start();                
            buttonPort1.Text = "Stop Recording";
        }
        else
        {
            timerPort1.Stop();
            buttonPort1.Text = "Start Recording";
        }
    }

//每次将“ D”写入硬件以接收回响应

    private void timerPort1_Tick(object sender, EventArgs e)
    {               
            port1.Write("D");
    }


void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            string result = port1.ReadLine();
            oneParamDelegate dg = PHandCondResult;  // send back the result to the main thread
            this.Invoke(dg, result);
        }
        catch
        {
        }

    }

端口2

第二个端口的代码实际上与上面的相似,区别在于端口,数据接收事件和计时器不同。

我将尝试Grant Thomas建议的多线程选项:我之前没有尝试过,因为我认为串行端口已经在单独的线程上工作:datareceived事件不会阻塞主线程,并且您无法访问创建的控件在主线程上,但我仍将使用后台工作程序进行尝试,稍后再返回。 谢谢大家的快速回复。

您将需要做一些阅读,特别是关于Threading

如果您有一些类似以下的代码:

ReadDataFromSomePort();
ReadDataFromSomeOtherPort();

然后,第一个将同步执行(阻塞), 然后是第二个。 这发生在同一线程(主应用程序线程)上。 当您想做异步事情时,包括在保持UI交互式/响应性的同时做一件事,那么您需要将工作委派给其他线程。

因此,您最终会得到如下结果:

var thread1 = new Thread(ReadDataFromSomePort);
var thread2 = new Thread(ReadDataFromSomeOtherPort);

thread1.Start();
thread2.Start();

除此之外,还有更多,请放心,所以我建议在继续之前对这一概念进行一些研究。

MSDN提供了有关线程教程/编程参考 ,可以帮助您入门。

创建两个不同的SerialPort对象和两个不同的DataReceived事件都应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM