通过串口发送和接收不起作用

时间:2013-06-25 09:33:28

标签: c# terminal serial-port

我是编程新手。

我正在为一些测试制作终端程序,程序必须通过串行零调制解调器发送和接收数据。我在MSDN上找到了一个例子:http://msdn.microsoft.com/en-us/library/y2sxhat8.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

但我无法让它发挥作用。这就是我现在所拥有的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Threading;

namespace Terminal_0._0._0._2
{
    class Program
    {
        public static void Main()
        {
            string name;
            string message;
            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
            Thread readThread = new Thread(Read);

            // Create a new SerialPort object with default settings.
            SerialPort _serialPort = new SerialPort();

            // Allow the user to set the appropriate properties.
            _serialPort.PortName = "COM8";
            _serialPort.BaudRate = 115200;
            _serialPort.Parity = Parity.None;
            _serialPort.DataBits = 8;
            _serialPort.StopBits = StopBits.One;
            _serialPort.Handshake = Handshake.None;

            // Set the read/write timeouts
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;

            _serialPort.Open();
            var _continue = true;
            readThread.Start();

            Console.Write("Name: ");
            name = Console.ReadLine();

            Console.WriteLine("Type QUIT to exit");

            while (_continue)
            {
                message = Console.ReadLine();

                if (stringComparer.Equals("quit", message))
                {
                    _continue = false;
                }
                else
                {
                    _serialPort.WriteLine(
                        String.Format("<{0}>: {1}", name, message));
                }
            }

            readThread.Join();
            _serialPort.Close();
        }



    }
    public static void Read()
        {
            while (_continue)
            {
                try
                {
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                }
                catch (TimeoutException) { }
            }
        }
}

我收到此错误: 预期的类,委托,枚举,接口或结构 在线:66 专栏:19

提前致谢。

1 个答案:

答案 0 :(得分:1)

据我所知,可能有一些因素导致它无法正常工作。 首先,Read方法超出了Program范围,导致它无法正常工作。 其次,移动它也不会工作,直到你还制作“_continue”和“_serialPort”字段(外部方法)。

重写代码(删除冗余'使用'语句):

using System;
using System.IO.Ports;
using System.Threading;

namespace Terminal_0._0._0._2
{
    class Program
    {
        private static bool _continue;
        private static SerialPort _serialPort;

        public static void Main()
        {
            string name;
            string message;
            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
            var readThread = new Thread(Read);

            // Create a new SerialPort object with default settings.
            _serialPort = new SerialPort
                {
                    PortName = "COM8",
                    BaudRate = 115200,
                    Parity = Parity.None,
                    DataBits = 8,
                    StopBits = StopBits.One,
                    Handshake = Handshake.None,
                    ReadTimeout = 500,
                    WriteTimeout = 500
                };

            // Allow the user to set the appropriate properties.

            // Set the read/write timeouts

            _serialPort.Open();
            _continue = true;
            readThread.Start();

            Console.Write("Name: ");
            name = Console.ReadLine();

            Console.WriteLine("Type QUIT to exit");

            while (_continue)
            {
                message = Console.ReadLine();

                if (stringComparer.Equals("quit", message))
                {
                    _continue = false;
                }
                else
                {
                    _serialPort.WriteLine(
                        String.Format("<{0}>: {1}", name, message));
                }
            }

            readThread.Join();
            _serialPort.Close();
        }

        public static void Read()
        {
            while (_continue)
            {
                try
                {
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                }
                catch (TimeoutException) { }
            }
        }
    }
}

由于我没有任何串口设备,我无法测试它,但编译器编译它没有错误。

由于 Bjarke