【问题标题】:How to make stopwatch visible? C# [closed]如何使秒表可见? C# [关闭]
【发布时间】:2016-09-16 18:03:08
【问题描述】:
public static string stopwatch()
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;
        // Format and display the TimeSpan value.
        String elapsedTime = String.Format("{0:0}.{1:000}", ts.Seconds, ts.Milliseconds / 1000);
        return elapsedTime;
    }

    static void Main(string[] args)
    {
        string elptime = stopwatch();
        for (Console.ReadKey(true); ;)
        {
            Console.WriteLine(elptime);
        }
    }
}

所以我想制作一个程序,每次我按下按钮时,都会按照这个顺序从Stopwatch();写入控制台值,例如:

0.520

0.801

1.255

但不是这样,而是:

0.000

0.000

0.000

0.000

0.000

像无限数组

【问题讨论】:

  • 每次调用stopwatch 都会启动一个新的秒表实例,您应该重复使用它。
  • 您也没有多次致电stopwatch...
  • 您只需检查一次“已用时间”并将结果存储在一个变量中,您只需一遍又一遍地打印。如果要获取更新的时间,需要再次从Stopwatch实例中获取。

标签: c# timer stopwatch


【解决方案1】:

您应该使用StopWatch 的相同实例,在您按下键后,计时器应该再次计时。所以试试这段代码,

static Stopwatch watch = new Stopwatch();
        static void Main(string[] args)
        {
            while (true)
            {
                startWatch();
                for (Console.ReadKey(true); ;)
                {
                    string elptime = stopwatch();
                    Console.WriteLine(elptime);
                    break; // to exit for and startWatch() again.
                }
            }
        }

        static public void startWatch()
        { 
            watch.Start();
        }
        public static string stopwatch()
        {
            String elapsedTime = "";
            TimeSpan ts = watch.Elapsed;
            elapsedTime = String.Format("{0:0}.{1:000}", ts.Seconds, ts.Milliseconds / 1000);
            return elapsedTime;
        }

希望有所帮助,

【讨论】:

  • 有效,但毫秒不可见。我得到的数字例如:1.000、1.000、2.000、3.000、5.000...
  • 为什么要将毫秒除以 1000? @Mayketi
  • 已解决,非常感谢!
【解决方案2】:

这是因为每次调用 stopwatch() 方法时,它都会创建一个新的秒表实例并从 0 开始。

更好的方法是在 main 方法中创建一个 Stopwatch 实例,在 for 循环之前启动它,并在 for 循环中调用秒表的经过时间。

一个简单的代码

static void Main(string[] args)
{
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    for (Console.ReadKey(true); ;)
    {
        TimeSpan ts = stopWatch.Elapsed;
        String elapsedTime = String.Format("{0:0}.{1:000}", ts.Seconds, ts.Milliseconds / 1000);
        Console.WriteLine(elapsedTime);
    }
}

【讨论】:

    【解决方案3】:

    您将希望使用 GetElapsed() 方法定义一个类。按下某个键时调用 GetElapsed。

    但这开始引出一个问题,如果你真的只是在模拟方法,为什么要包装类? 是的,就像 hakanshehu 建议的那样直接使用这个类,包装它是一种浪费。

    public class MyStopWatch
        {
            Stopwatch stopWatch;
            public MyStopWatch()
            {
              stopWatch = new Stopwatch();
              stopWatch.Start();
            }
            public String GetElapsed()
            {
                TimeSpan ts = stopWatch.Elapsed;
                // Format and display the TimeSpan value.
                return String.Format("{0:0}.{1:000}", ts.Seconds, ts.Milliseconds / 1000);
            }
    
        }
    
        static void Main(string[] args)
        {
            MyStopWatch msw = new MyStopWatch();
            for (Console.ReadKey(true); ;)
            {
                Console.WriteLine(msw.GetElapsed());
            }
        }
    }
    

    【讨论】:

    • 你不能在那里直接调用stopWatch.Start();,那样会报错。
    • 已更新,谢谢@Berkay
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多