Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对C#SerialPort.Write()方法的误解_C#_.net_Serial Port - Fatal编程技术网

对C#SerialPort.Write()方法的误解

对C#SerialPort.Write()方法的误解,c#,.net,serial-port,C#,.net,Serial Port,我的任务是通过代码将输入数据发送到串行端口。我使用.NETFramework4客户端配置文件。我有一个成功处理扫描器数据的例子,我想通过编程来模拟这个例子。C#SerialPort.Write()似乎适用于此,但port#u DataReceived处理程序不起任何作用: namespace ConsoleApplication_ReadTabel { class SerialPortProgram { private SerialPort port;

我的任务是通过代码将输入数据发送到串行端口。我使用.NETFramework4客户端配置文件。我有一个成功处理扫描器数据的例子,我想通过编程来模拟这个例子。C#SerialPort.Write()似乎适用于此,但port#u DataReceived处理程序不起任何作用:

namespace ConsoleApplication_ReadTabel
{
    class SerialPortProgram
    {
        private SerialPort port; 

        string input = "";

        [STAThread]
        static void Main(string[] args)
        {
            new SerialPortProgram();
        }

        private SerialPortProgram()
        {
            port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

            Console.WriteLine("Incoming Data:");

            port.DataReceived += new
            SerialDataReceivedEventHandler(port_DataReceived);

            port.Open();

            port.Write("ghghgh");

            Console.Read();
        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            input = port.ReadLine();
            Console.WriteLine(input);
            Console.WriteLine("----");
        }
    }
}

问题是Console.Read(); 你可以试试这个

namespace ConsoleApplication_ReadTabel
{
    class SerialPortProgram
    {
        private SerialPort port; 

        string input = "";

        [STAThread]
        static void Main(string[] args)
        {
            new SerialPortProgram();
        }

        private SerialPortProgram()
        {
            port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

            Console.WriteLine("Incoming Data:");

            port.DataReceived += new
            SerialDataReceivedEventHandler(port_DataReceived);

            port.Open();

            port.Write("ghghgh");

            Console.Read();//when program is waiting here, send something the port and continue

            Thread.Sleep(5000);

            Console.Read();
        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            input = port.ReadLine();
            Console.WriteLine(input);
            Console.WriteLine("----");
        }
    }
}
这是对的。我们不能通过代码在同一个端口同时写和读(至少通过使用.NETFramework4)。所以决定使用自由软件在两个虚拟端口之间创建连接。第一个调用write()方法,第二个处理输入信号

class SerialPortProgram
{
    private SerialPort port, port2;

    [STAThread]
    static void Main(string[] args)
    {
        new SerialPortProgram();
    }

    private SerialPortProgram()
    {
        port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
        port.Open();

        port2 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);           
        port2.DataReceived += new SerialDataReceivedEventHandler(port2_DataReceived);
        port2.Open();

        port.Write("Hello!");

        Console.Read();
    }

    void port2_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Console.WriteLine("COM4 incoming data:");
        Thread.Sleep(300);
        string inp = port2.ReadExisting();
        Console.WriteLine(inp);
        Console.WriteLine("----");
    }
}

您使用的是什么版本的.net?核心还是框架?请搜索单词loopback test以了解其内容。除非同一端口的传输和接收通过硬件连接,否则无法从同一端口读取写入端口的内容。我使用.NET Framework 4客户端配置文件