Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Timerコントロールの精度
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30290#CommentId83110
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2017/10/3 17:06:59
DataReceived イベント内から メッセージボックスを呼び出してはいけません。
MessageBox を表示した段階でコードの実行がそこで止まってしまいますので、
処理の確認を行いたいのであれば、Debug.WriteLine メソッド等を使うようにしましょう。
(同様の理由で、ブレークポイント等による一時停止も避けるようにします)
> Private Sub SerialPort1_DataReceived(…
> Dim dtBegin As Date = DateTime.Now
> Dim dtCurrent As Date = DateTime.Now 'データを受信した時刻
> Dim span As TimeSpan = dtCurrent - dtBegin '経過時間
> Dim totalSeconds As Double = span.TotalSeconds '何秒経過したのか
dtBegin の部分が明らかにおかしいです。上記は要するに、
Dim span As TimeSpan = Now - Now
Dim totalSeconds As Double = span.TotalSeconds
とほぼ同義ですよね。これでは totalSeconds ≒ 0.0 になるのも当然です。
私が先に書いたのは
Dim dtBegin As Date = [SerialPortをOpenした時の時刻]
であって、
Dim dtBegin As Date = [DataReceived イベントが呼ばれたときの時刻]
ではありませんよ。
dtBegin は、「SerialPortをOpenした時の時刻」もしくは
「DataReceived イベントが最初の 1 回目に呼ばれたときの時刻」にしましょう。
> 通信開始時刻と現時刻をミリ秒単位で取得して
実際の分解能はさておき、Now で得られる日付値は
100ナノ秒単位まで取得できるようになっていますので、
Dim totalSeconds As Double = span.TotalSeconds
の部分を
Dim totalMilliseconds As Double = span.TotalMilliseconds
としておけば十分かと思います。