私は小さなプログラムを作成しました。何もうまくいきますが、今は私がコンパイル入力を待たなければならないことを認識しました。ここで私は固執しました。終了および他のものとの場合は正常に動作します。ここCの他のスレッドの中でComport値を待つ
void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
RxString = serialPort.ReadLine();
this.Invoke(new EventHandler(DisplayText));
}
void DisplayText(object sender, EventArgs e)
{
String RxString1 = RxString+("\n");
if (RxString1 == "END\n") {
stopauto = "stop";
autostart.Enabled = true;
autostop.Enabled = false;
}
:
は、ここに私のDataReceived
スレッドです。
しかし、今私は別のスレッドを持っています。その中には、私がcomport入力を受け取るのを待たなければなりません。例えば、 "go"です。
私はしばらくの間とし、もしながらA、それを試してみましたprivate void AutostartClick(object sender, EventArgs e)
{
.... Do some Code
... Here i want to wait for "go"
... If go is received go ahead
}
私はそれが200本のラインの近くにあり、全体のコードを投稿していない... ...しかし、これは内部のために動作しません。私はそのコンポートから何も受け取っていません。
AutoResetEvent
で再生しましたが、あまりにも詰まっています。
私は間違っていますか?
"これは私の' DataReceived'スレッド "です。これはスレッドではありません。 – Aron
DataReceivedイベントは、シリアルポート入力が必要なスレッドを*持っていない場合に便利です。あなたが2つの別々のスレッドを調整するようなスレッドを持っていると、それは積極的に有害になります。 * RxString *のようなグローバル変数を使用すると、その権利を得る確率はゼロに近くなります。単にイベントハンドラを削除し、ReadLine()を直接使用してください。 –