トップ回答者
シリアルポート受信した時画面遷移させる方法

質問
-
VisualBasic2010のSerialPort.DataReceivedイベントを使用してデータ受信をし
変数に受信内容を格納するプログラムを作成しました。
ここまでは問題ないのですが,変数に受信内容を格納した後に次画面に遷移させたいのですが
次画面に遷移させたときにアプリケーションの動作が処理中の状態のまま変わりません。
何が問題なのかよろしくご教授お願いいたします。
(参考)
Delegate Sub AddDataDelegate(ByVal str As String)
Private Sub AddData(ByVal str As String)
Dim a As String
NextGamen.Show()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim strDataReceived As String
Dim add As New AddDataDelegate(AddressOf AddData)
Try
SerialPort1.Encoding = System.Text.Encoding.GetEncoding(932)
strDataReceived = SerialPort1.ReadExisting
Catch ex As Exception
strDataReceived = ex.Message
End Try
Invoke(add, strDataReceived)
End Sub
回答
-
外池と申します。小生の経験に基づく説明で恐縮ですが、参考になれば幸いです。
DataReceivedイベントは、ポートからの読み取りを試みるキッカケとして使うべきであって、プログラムの動作全体を制御するものとしてはアテにするべきでないと思います。DataReceivedイベントの発生する条件は、ドキュメントを見ても「OS次第」ということが書いてあって、ポートを通じてやりとりされる通信のプロトコルを反映したものにはならないと考えるべきです。
「1行読み取れたら次へ」とか、「何文字読み取れたら次へ」というように、読み取ったデータがプロトコルに照らして一通り揃ったことをもって次へ進むように、プログラムすると確実だと思います。
-
VisualBasic2010のSerialPort.DataReceivedイベントを使用してデータ受信をし、変数に受信内容を格納するプログラムを作成しました。
ここまでは問題ないのですが,変数に受信内容を格納した後に次画面に遷移させたいのですが、次画面に遷移させたときにアプリケーションの動作が処理中の状態のまま変わりません。
何が問題なのかよろしくご教授お願いいたします。
この後ろにコードがありますが、まず、
- どのようなことを
- どのような順番で
行えば、目的が達せられると考えましたか?プログラミングの肝はこれなので、これが間違えていれば、「期待している動作」とはなりません。まず、手順が間違えているのか、それともコードが間違えているのか、そこの切り分けからはじめませんか?
また、「アプリケーションの動作が処理中の状態のまま変わりません」を、もっと詳しく説明してください。今の状態ですと、次のようなことが考えられます。
- 実際には、次の画面に進んでいる。しかし、処理中の画面を隠していないため、処理中のままのように見える。
Jitta@わんくま同盟
すべての返信
-
外池と申します。小生の経験に基づく説明で恐縮ですが、参考になれば幸いです。
DataReceivedイベントは、ポートからの読み取りを試みるキッカケとして使うべきであって、プログラムの動作全体を制御するものとしてはアテにするべきでないと思います。DataReceivedイベントの発生する条件は、ドキュメントを見ても「OS次第」ということが書いてあって、ポートを通じてやりとりされる通信のプロトコルを反映したものにはならないと考えるべきです。
「1行読み取れたら次へ」とか、「何文字読み取れたら次へ」というように、読み取ったデータがプロトコルに照らして一通り揃ったことをもって次へ進むように、プログラムすると確実だと思います。
-
VisualBasic2010のSerialPort.DataReceivedイベントを使用してデータ受信をし、変数に受信内容を格納するプログラムを作成しました。
ここまでは問題ないのですが,変数に受信内容を格納した後に次画面に遷移させたいのですが、次画面に遷移させたときにアプリケーションの動作が処理中の状態のまま変わりません。
何が問題なのかよろしくご教授お願いいたします。
この後ろにコードがありますが、まず、
- どのようなことを
- どのような順番で
行えば、目的が達せられると考えましたか?プログラミングの肝はこれなので、これが間違えていれば、「期待している動作」とはなりません。まず、手順が間違えているのか、それともコードが間違えているのか、そこの切り分けからはじめませんか?
また、「アプリケーションの動作が処理中の状態のまま変わりません」を、もっと詳しく説明してください。今の状態ですと、次のようなことが考えられます。
- 実際には、次の画面に進んでいる。しかし、処理中の画面を隠していないため、処理中のままのように見える。
Jitta@わんくま同盟