数据到来时C#只读串口

C# read only Serial port when data comes(数据到来时C#只读串口)
本文介绍了数据到来时C#只读串口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想读取我的串口,但只有在数据到来时(我不想轮询).

I want read my serial port but only when data comes(I want not polling).

我就是这样做的.

                Schnittstelle = new SerialPort("COM3");
                Schnittstelle.BaudRate = 115200;
                Schnittstelle.DataBits = 8;
                Schnittstelle.StopBits = StopBits.Two;
             ....

然后我开始一个线程

             beginn = new Thread(readCom);
             beginn.Start();

在我的 readCom 中,我正在连续阅读(轮询:()

and in my readCom I'm reading continuous (polling :( )

private void readCom()
    {

        try
        {
            while (Schnittstelle.IsOpen)
            {

                Dispatcher.BeginInvoke(new Action(() =>
                {

                    ComWindow.txtbCom.Text = ComWindow.txtbCom.Text + Environment.NewLine + Schnittstelle.ReadExisting();
                    ComWindow.txtbCom.ScrollToEnd();
                }));

                beginn.Join(10);

            }
        }
        catch (ThreadAbortException) 
        {

        }

        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

我希望你在中断到来时阅读.但是我该怎么做呢?

I want yout read when a Interrupt is coming. But how can I do that ?

推荐答案

您必须向 DataReceived 事件添加一个 eventHandler.

You will have to add an eventHandler to the DataReceived event.

以下是来自 msdn.microsoft.com 的示例,并进行了一些修改:查看评论!:

Below is an example from msdn.microsoft.com, with some edits: see comments!:

public static void Main()
{
    SerialPort mySerialPort = new SerialPort("COM1");

    mySerialPort.BaudRate = 9600;
    mySerialPort.Parity = Parity.None;
    mySerialPort.StopBits = StopBits.One;
    mySerialPort.DataBits = 8;
    mySerialPort.Handshake = Handshake.None;

    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

    mySerialPort.Open();

    Console.WriteLine("Press any key to continue...");
    Console.WriteLine();
    Console.ReadKey();
    mySerialPort.Close();
}

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    Debug.Print("Data Received:");
    Debug.Print(indata);
}

每次数据进入时,DataReceivedHandler 都会触发并将您的数据打印到控制台.我认为你应该能够在你的代码中做到这一点.

Everytime data comes in, the DataReceivedHandler will trigger and prints your data to the console. I think you should be able to do this in your code.

这篇关于数据到来时C#只读串口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)