-1

私はプログラミングが初めてです。

いくつかのテスト用に端末プログラムを作成しています。プログラムは、シリアル ヌル モデムを介してデータを送受信する必要があります。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

前もって感謝します。

4

1 に答える 1

1

私が知る限り、動作しない原因がいくつかある可能性があります。まず、Read メソッドが Program のスコープ外にあるため、機能しません。第二に、「_continue」および「_serialPort」フィールド(メソッドの外側)も作成するまで、内部に移動しても機能しません。

作り直されたコード (冗長な 'using' ステートメントを削除):

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) { }
            }
        }
    }
}

私はシリアル デバイスを持っていないので、テストすることはできませんが、コンパイラはエラーなしでコンパイルしました。

ありがとうビャルケ

于 2013-06-25T15:49:38.350 に答える