2013-06-25 31 views
-1

我是编程新手。通过串口发送和接收不起作用

我正在做一些测试的终端程序,该程序必须通过串行null调制解调器发送和接收数据。我在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

在此先感谢。

+2

我猜你会需要这个问题的一个更好的冠军。 –

+2

那么究竟是什么问题呢? “我无法实现它”让我们无所适从。 –

+1

你得到了什么错误信息? –

回答

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

+0

谢谢你的答案先生Bjarke –