0

USB ポートからデータを読み取り、受信時にテキスト ボックスに書き込みたい C# でプログラムを作成しています。RS-232 経由でデータ (PuTTY 経由で検証) を送信するマルチメーターがあり、232 を Prolific 2303 USB-Serial コンバーターに接続しています。デバイス マネージャーを使用して、これが COM4 であることを確認し、マルチメーターの仕様を調べて、ボー、ストップ ビット、パリティなどを見つけました。System.IO.Ports.SerialPort を使用して、シリアル ポートをセットアップしました。適切な COM 参照、ボーなどを持つオブジェクト。何らかの理由で、デリゲート関数が実行されないため、DataReceived イベントがトリガーされないようです。私が言ったように、私は PuTTY で見ることができるので、データが到着していることを知っています。以下は、誰かが私を助けてくれることを願って私のコードです... これで何が起こっているのかを理解するために、さらに情報が必要な場合はお知らせください。よろしくお願いします!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Reflection;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class dataAcquisitionMain : Form
    {
        string RxString;

        public dataAcquisitionMain()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)//"Start" button
        {
            serialPort1.PortName = "COM4";
            serialPort1.BaudRate = 2400;

            serialPort1.Open();
            if (serialPort1.IsOpen)
            {
                inputStream.ReadOnly = false; //A text box I want to put data into
                startButton.Enabled = false;
                stopButton.Enabled = true;
            }
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            serialPort1.DataReceived += serialPort1_DataReceived;
            RxString = serialPort1.ReadExisting();
            this.Invoke((MethodInvoker)delegate{DisplayText();});
        }
        private void DisplayText()
        {
            textBox1.Text = "here";
            inputStream.Text = RxString;
            inputStream.AppendText(RxString);
        }

        private void dataAcquisitionMain_FormClosing(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }
    }
}
4

1 に答える 1

2

入れてみて

serialPort1.DataReceived += serialPort1_DataReceived;

dataAcquisitionMain() で。

を呼び出すイベントを初期化しようとしているようです

serialPort1_DataReceived;

イベント ハンドラーで。

それが理にかなっていれば。

試す:

SerialPort.comPort.DataReceived +=new SerialDataReceivedEventHandler(comPort_DataReceived);
于 2013-04-10T11:43:57.320 に答える