Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示计时器结果_C#_Timer_Textbox - Fatal编程技术网

C# 显示计时器结果

C# 显示计时器结果,c#,timer,textbox,C#,Timer,Textbox,我实例化了一个计时器,如下所示: System.Timers.Timer seconds = new System.Timers.Timer(); seconds.Elapsed += new ElapsedEventHandler(seconds_Tick); seconds.Interval = 1; seconds.Enabled = true; //start timer 我创建了滴答声事件,如下所示: private void seconds_Tick(object sender,

我实例化了一个计时器,如下所示:

System.Timers.Timer seconds = new System.Timers.Timer();
seconds.Elapsed += new ElapsedEventHandler(seconds_Tick);
seconds.Interval = 1;
seconds.Enabled = true; //start timer 
我创建了滴答声事件,如下所示:

private void seconds_Tick(object sender, EventArgs e)//source
{
    time++;
}//end clock_Tick()
time是代码中声明的整数变量

我尝试这样显示结果(在方法中):


在计时器运行超过一小时之前,这项功能非常有效,因此我尝试:

txtProcessTime.Text = TimeSpan.FromHours(time).ToString();
这显示了一个更不寻常/意想不到的结果

我试过其他一些,但我想我用错了部分

我想编码一个计时器,考虑到毫秒、秒和小时,并将结果显示在文本框中。你能帮忙吗

计时器以00:00:00格式显示
TimeSpan.FromHours
问题显示的内容大致是:7070:xx:xx(我不记得x的值是什么)。 程序运行超过一小时后的
TimeSpan.FromSeconds
显示:2:xx:xx(我不记得x的值是什么)


格式显示为mm:ss:millizes-可能是60分钟过去后分钟转换为单个数字吗?

这里显然有问题:
中指定了间隔,但您将其设置为
1
。然后,使用
FromSeconds
创建
TimeSpan

因此,如果您希望每秒发生一次事件,请将其设置为:

seconds.Interval = 1000;
如果您仍然希望每隔毫秒执行一次,请更改您的
TimeSpan

txtProcessTime.Text = TimeSpan.FromMilliSeconds(time).ToString()

这里显然有点不对劲:
Interval
在中指定,但您将其设置为
1
。然后,使用
FromSeconds
创建
TimeSpan

因此,如果您希望每秒发生一次事件,请将其设置为:

seconds.Interval = 1000;
如果您仍然希望每隔毫秒执行一次,请更改您的
TimeSpan

txtProcessTime.Text = TimeSpan.FromMilliSeconds(time).ToString()

与当前的方法不同,您可能会发现此方法更有用,并且易于根据您的需求进行修改

使用系统诊断

    Stopwatch sw;
    public Form1()
    {
        InitializeComponent();
        sw = new Stopwatch();
        sw.Start();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = sw.Elapsed.ToString();
    }

与当前的方法不同,您可能会发现此方法更有用,并且易于根据您的需求进行修改

使用系统诊断

    Stopwatch sw;
    public Form1()
    {
        InitializeComponent();
        sw = new Stopwatch();
        sw.Start();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = sw.Elapsed.ToString();
    }


“在计时器运行超过一个小时之前,这项功能非常有效……”。会发生什么?你有错误吗?“这显示了一个更不寻常/意外的结果。”再说一遍,它在做什么?计时器的Interval属性不是以秒为单位的,而是以毫秒为单位的。您的TimeSpan.FromSeconds呼叫不会以秒为单位为您提供TimeSpan。请检查编辑的问题以获得答复(抱歉,有歧义)。我明白这是什么引起了问题。为什么不呢?这里有很多问题。你不可能得到1毫秒。您也无法获得1000毫秒,粒度为1/64秒。无法从已用事件处理程序更新文本框。通过使用同步计时器并从DateTime.UtcNow记录开始时间,您可以提前完成任务。当它滴答作响时,再从DateTime.UtcNow中减去它,得到经过的挂钟时间。“在计时器运行超过一个小时之前,这非常有效……”。会发生什么?你有错误吗?“这显示了一个更不寻常/意外的结果。”再说一遍,它在做什么?计时器的Interval属性不是以秒为单位的,而是以毫秒为单位的。您的TimeSpan.FromSeconds呼叫不会以秒为单位为您提供TimeSpan。请检查编辑的问题以获得答复(抱歉,有歧义)。我明白这是什么引起了问题。为什么不呢?这里有很多问题。你不可能得到1毫秒。您也无法获得1000毫秒,粒度为1/64秒。无法从已用事件处理程序更新文本框。通过使用同步计时器并从DateTime.UtcNow记录开始时间,您可以提前完成任务。当它滴答作响时,再次从DateTime.UtcNow中减去它以获得经过的wallclock时间。1000毫秒是一秒,但是计时器可能运行不到一秒,因此我需要更小的间隔。。“我该如何证明这一点?”Sayse别担心,有人向你求助我意识到,我相信你的回答在发布时是正确的1000毫秒是一秒,但是计时器可能运行不到一秒,所以我需要间隔更小。。“我该怎么显示呢?”Sayse别担心,有人为你准备了-我意识到,我相信你在发帖时的答案是正确的。这需要一些操作(在本例中单击按钮)来更新文本框,而OP想(我理解)每秒钟更新一次。@JuliánUrbano-他总是可以将它与他的间隔计时器或数据绑定结合起来;)是的。奇怪的是,
Timer
中没有某种
经过的时间
这需要一些操作(在本例中单击按钮)来更新文本框,而OP希望(我理解)每秒更新一次。@JuliánUrbano-他总是可以将它与他的间隔计时器或数据绑定结合起来;)是的。奇怪的是,
Timer