0

VisualBasicでストップウォッチの精度をテストするためのダミーソフトウェアはほとんどありません。ビジュアルベーシックのタイミングは本当に良いと言われていますが、奇妙な振る舞いをしています。

これはすべて私のコードです:

Imports System.IO
Public Class Form1
    Public tmrTime As New Stopwatch
    Dim currentDate As Date

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        tmrTime.Start()

    End Sub

    Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        TextBox1.Text = (tmrTime.ElapsedTicks / Stopwatch.Frequency) * 1000

    End Sub


    Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        TextBox2.Text = (tmrTime.ElapsedTicks / Stopwatch.Frequency) * 1000
    End Sub
End Class

問題は、2つのテキストボックスの非小数部分(押す絶対時間と離す絶対時間)をとると、ほとんど常に結合されている、つまり、奇数または偶数の両方であるということです。

何が起こっているのか知っていますか?

tmrTime.ElapsedMillisecondsまたはtmrTime.Elapsed.Ticksを使用しても同じ結果が得られます:-\

4

2 に答える 2

1

.NetのStopWatch/Timerの精度に関する優れた記事が、MSDNブログにあります。私があなたが何をしたいのかを正しく理解していれば、これはあなたの問題を解決するはずです:

Public Class Form1
    Private _sw As New Stopwatch

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        _sw.Start()
    End Sub

    Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
        Dim elapsed As Long
        elapsed = _sw.ElapsedTicks
        _sw.Stop()
        tbTicks.Text = (elapsed / Stopwatch.Frequency) * 1000
        _sw.Reset()
    End Sub
End Class
于 2013-02-27T21:21:23.657 に答える
0

Georg から投稿されたコードはアップグレードが必要です:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
End Sub
于 2016-04-26T15:41:51.150 に答える