0

我正在尝试为我正在学习的 C# 课程制作一个简单的秒表。我整个下午都在谷歌上搜索,发现了很多我不理解或不能完全解决我遇到的问题的信息。

当我目前正在学习类、方法、字段和属性时,我正在尝试像这样设计我的秒表: 秒表概念设计

我不认为它需要非常精确。我正在尝试在键盘上按下一个键时获取一个 DateTime.now 对象:

DateTime.now start = Console.ReadKey();

我也试过:

var start = DateTime.now(Console.ReadKey());

那也行不通。

我查看了 C# 中 StopWatch 类的文档,但这对我来说似乎太高级了。我已经阅读了该页面 3 次,但仍然不知道它的作用: MS StopWatch class doc

我希望这里有人可以帮助我一点。最好的问候, Jacob Collstrup

4

3 回答 3

3

对于控制台应用程序,您可以通过DateTime.Now. ReadKey阻止流程,因此您可以DateTime.Now在按键后直接调用它。这样做两次以获得开始和结束,然后你可以减去它们以获得这样的持续时间:

Console.ReadKey();
DateTime start = DateTime.Now;
Console.ReadKey();
DateTime end = DateTime.Now;
var duration = end.Subtract(start);

DateTime.Subtract将返回 a TimeSpan,因此您可以将其打印出来或将其向上返回(如果它将在另一个函数中)。

查看您建议使用的图表DateTime.Now.Ticks,这似乎没有太大优势,因为这将是 along并且不能用于DateTime.Subtract此(显然您仍然可以这样做end - start)。如果需要以刻度返回持续时间,我建议您按照上面所说的方式执行操作,但是当我使用duration变量时,我会执行此操作duration.Ticks

如果您确实将startand存储end为记号 ( long) ,那么您将其转换为 aTimeSpan那么您需要这样做:

TimeSpan ts = new TimeSpan(end - start);  
于 2019-12-18T15:45:17.483 回答
2

你想要的是这样的:

Console.ReadKey();
DateTime start = DateTime.Now;

调用Console.ReadKey()将阻塞,直到按下一个键。一旦该行返回,您将获得当前时间。

停止时间也一样。

于 2019-12-18T15:40:47.970 回答
2

DateTime.Now您可以在调用后立即获得 的值ReadKey()

Console.ReadKey();
DateTime now = DateTime.Now;
Console.WriteLine("Key was pressed at " + now.ToString());

这应该可以正常工作,因为ReadKey()当用户按下某个键时会阻塞并返回。

于 2019-12-18T15:41:24.953 回答