したがって、最近はドアを開くことができるボタンがSerialPort
にあります。これを行うために、私はそれに何かを送って、既に構成され開発された応答を待つでしょう。コントロールはC#で作成されたスレッド以外のスレッドからアクセスされました
しかし、私はThread.Sleep()
を設定するいくつかのトラブルが発生しています。
これは私がボタンの内部で得たものである:
private void cmdOpenDoor_Click(object sender, EventArgs e)
{
Thread.Sleep(5000);
Task.Factory.StartNew(this.Demo);
}
そしてDemo
方法は次のとおりです。
private void Demo()
{
string questionMark= "?";
string incoming = comport.ReadExisting();
string carriageReturn = "\r";
comport.Write(questionMark+ "(" + carriageReturn);
Cursor.Current = Cursors.WaitCursor;
if (txtTest.Text == "@q")
{
MessageBox.Show("Door opened!", MessageBoxButtons.OK, MessageBoxIcon.Information);
pbGreen.Show();
pbRed.Hide();
}
else
{
MessageBox.Show("The door is already opened!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
私はドアを開けますと、それはメッセージとときを「ドアが開いた」と表示アプリケーションが停止し、エラーが発生すると、pbGreen.Show()
を実行しようとします。
クロススレッドオペラ無効なコントロール:作成されたスレッド以外のスレッドからアクセスされたコントロール
どうすれば解決できますか?私は呼び出すことができませんPictureBox
検索、例えば[here](http://stackoverflow.com/q/142003/1997232)はwinformsと重複しています。[here](http://stackoverflow.com/q/11923865/1997232)はwpfです。 – Sinatr
これは 'TextBox'ではなく' PictureBox' @Sinatrです – Forrobodo
問題はコントロールの種類には無関係です。そして、あなたは 'PictureBox' *を呼び出すことができます。私は質問に対応するタグを追加する(winforms?wpf?...)2)あなたがなぜ "あなたが"呼び出すことができないのかを説明する。 *。受け取ったメッセージは、GUI関連のものをGUIスレッドにディスパッチ/呼び出すとすぐに消えていくはずです。 – Sinatr