5

ディスパッチタイマーを使用してキー押下イベント間の経過時間をミリ秒単位で測定しようとしていますが、ディスパッチタイマーの間隔を1ミリ秒と宣言してからティックイベントを確立すると、1ミリ秒ごとに起動するのではなく、10のようになります。 100ミリ秒(推測)。このティックイベントが時間どおりに発生しない場合、ミリ秒単位で時間を正確に測定するにはどうすればよいですか?System.Timersにアクセスできないように見えるSilverlightでこれを行っています。System.Threading.Timerでも同じことが起こるようです。

コードの基本は次のとおりです。

public void StartTimer(object o, RoutedEventArgs sender)
{
    System.Windows.Threading.DispatcherTimer myDispatcherTimer = new  
    System.Windows.Threading.DispatcherTimer();
    myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1); // 1 Milliseconds 
    myDispatcherTimer.Tick += new EventHandler(Each_Tick);
    myDispatcherTimer.Start();
}

// A variable to count with.
int i = 0;

public void Each_Tick(object o, EventArgs sender)
{
    i++;
}

public void keypress(object s, EventArgs args)
{
    label1.contents = i.ToString();
    i = 0;
}

何か案は?

4

2 に答える 2

5

代わりにストップウォッチを開始し、キーが押されるたびに、最後の経過ミリ秒(変数に格納する必要があります)からストップウォッチの現在の経過ミリ秒を減算するだけです。

    private Stopwatch _stopwatch;
    private int _lastElapsedMs;

    public void StartTimer(object o, RoutedEventArgs sender)
    {
        _lastElapsedMs = 0;
        _stopwatch = Stopwatch.StartNew();
    }

    public void keypress(object s, EventArgs args)
    {
        int elapsedMs = (int)_stopwatch.ElapsedMilliseconds;
        int currentElapsed = (elapsedMs - _lastElapsedMs);

        _lastElapsedMs = elapsedMs;

        label1.contents = currentElapsed.ToString();
    }
于 2010-11-23T00:45:37.200 に答える
2

SilverlightのSystem.Threadingタイマーは、約20msまでしか正確ではありません。通常、より良い解像度が必要な場合はマルチメディアタイマーが必要ですが、Silverlightで直接アクセスすることはできません。とはいえ、いくつかの重要な調整とトレードオフにより、最大3ミリ秒の精度のSilverlightタイマーを取得できることを読みました。ここで参照されているドキュメントを参照してください。

http://blogs.msdn.com/b/nikola/archive/2009/08/19/exposed-5-methods-to-create-game-loop-which-is-the-best.aspx

私はこれらすべての選択肢を自分でテストしたわけではありませんが、調べる価値があることに注意してください。

もう1つの方法は、最近導入されたSystem.Diagnostics.Stopwatchクラスです。残念ながら、これは、実行しているハードウェアによっては、高解像度タイマーである場合があります。また、MSドキュメントでは、それが本当に高解像度であるかどうかを判断する方法が指定されていないため、IsHighResolutionプロパティを確認するしかありません。

于 2010-11-23T00:46:28.043 に答える