使用计时器c#停止观察延迟

时间:2015-08-02 23:04:33

标签: c# visual-studio-2010 timer delay stopwatch

我想在我的表单中添加一个stopWatch但是我制作的那个在PC中的其他计时器的时间滞后。你能给出任何解决方案吗? (我的计时器间隔是100)。 这是我的代码:

int min, sec, ms = 0;
    private void timer1_Tick(object sender, EventArgs e)
    {
        Time.Text = min + ":" + sec + ":" + ms.ToString();
        ms++;
        if (ms > 9)
        {
            ms = 0;
            sec++;
        }

        if (sec > 59)
        {
            sec = 0;
            min++;
        }

    }

    private void timer_Click(object sender, EventArgs e)
    {
        timer1.Start();
    }

它工作但很容易延迟。我试图改变这么多东西,但没有一个能起作用。

2 个答案:

答案 0 :(得分:3)

计时器的刻度并不像您想象的那么精确。因此,如果计算开始时间与调用 tick 的时间之间的差异会更好。

DateTime startTime = DateTime.Now;  
private void timer1_Tick(object sender, EventArgs e)
{
    Time.Text = DateTime.Now.Subtract(startTime).ToString(@"mm\:ss\.ff");
}

private void timer_Click(object sender, EventArgs e)
{
    startTime = DateTime.Now;   
    timer1.Start();
}

答案 1 :(得分:0)

您的计时器间隔为100毫秒,因此为该

创建一个TimeSpan对象,作为类变量
<?php
namespace App\Http\Middleware;
use Closure;
class ResponseFormer
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        if($response->headers->get('content-type') == 'application/json')
        {
            if (is_array($response->original)) {
                $response->setContent(camelCaseKeys($response->original));
            }
            else if (is_object($response->original)) {
                //laravel orm returns objects, it is a huge time saver to handle the case here
                $response->setContent(camelCaseKeys($response->original->toArray()));
            }
        }
        return $response;
    }
}

将此添加到您用于跟踪时间的TimeSpan对象

TimeSpan _100ms = new TimeSpan(0,0,0,0,100);

将其显示在您的用户界面中:

TimeSpan ts = new TimeSpan();
ts = ts.Add(_100ms);

Fiddle Demo