如何使秒表可见? C#

How to make stopwatch visible? C#

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

像无限数组

您需要使用 GetElapsed() 方法定义 class。按下某个键时调用 GetElapsed。

但这开始回避问题,如果您真的只是在模拟方法,为什么要包装 class? 是的,按照 hakanshehu 的建议直接使用 class,包装它是一种浪费。

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() 方法时它都会创建一个新的秒表实例并从 0 开始。

更好的方法是在 main 方法中创建一个秒表实例,在 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);
    }
}

您应该使用 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;
        }

希望有所帮助,