0

[SerialPort]クラスを使用してシリアル通信を実行しようとしています。ハイパーターミナルを使用してこのクラスをテストする簡単なコンソールアプリケーションプロジェクトを作成しました。

これは私のプログラムです:

class Program
{
    private static bool _continue = true;
    private static SerialPort port;

    static void Main(string[] args)
    {
        try
        {
            port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
            port.ReadTimeout = port.WriteTimeout = 5000;
            port.Open();

            Thread thread = new Thread(Read);
            thread.Start();

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

                if (message.Equals("quit"))
                    _continue = false;
                else
                    port.Write(message);
            }

            thread.Join();
            port.Close();
        }
        catch (Exception ex)
        { }
    }

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

The problem is次のようになります。(コンソールで)行を書き込むと、ハイパーターミナルGUIで自分が書いた内容を確認できますが、ハイパーターミナルを使用して行を書き込むと、プログラムによって常に。をスローするメッセージが読み取られませんTimeoutException

なんで?
どうすればこの問題を解決できますか?
ありがとう。

4

2 に答える 2

2

SerialPort.DataRecievedイベントを利用してみませんか?

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

于 2012-10-05T22:18:30.310 に答える
1

Port.ReadLineが新しい行を待っている場合は、Port.Readを試してください。

于 2012-10-03T10:48:18.420 に答える