C# 如何使时间流逝的方法?
我需要一个方法,让我的过程经过一段时间。我在流程开始时调用它,在流程结束时再次调用它,然后该方法打印所用的总时间 这是我的方法,但总是以00:00打印时间。为什么会发生这种情况C# 如何使时间流逝的方法?,c#,runtime,stopwatch,C#,Runtime,Stopwatch,我需要一个方法,让我的过程经过一段时间。我在流程开始时调用它,在流程结束时再次调用它,然后该方法打印所用的总时间 这是我的方法,但总是以00:00打印时间。为什么会发生这种情况 public void GetTimeElapsed(string filePath, int logSelected, bool time, IUserOptions userOptions) { var stopwatch = new System.Diagnostics.Stopwatch(
public void GetTimeElapsed(string filePath, int logSelected, bool time, IUserOptions userOptions)
{
var stopwatch = new System.Diagnostics.Stopwatch();
LogBinaryWriter BinaryWriter = new LogBinaryWriter();
string timeElapsed = "";
if(time == true)
{
stopwatch.Start();
}
if (time == false)
{
stopwatch.Stop();
TimeSpan timeSpan = stopwatch.Elapsed;
timeElapsed = (string.Format("\nFile Generated: {0}\nTime Elapsed: {1} minute(s) {2} second(s)",
BinaryWriter.CreateLogFileName(filePath, Convert.ToInt32(logSelected)),
timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds / 10 + "\n"));
userOptions.DisplayUserMessage(timeElapsed);
}
}
每次调用此方法时,您都会创建一个新的秒表,但它看起来应该在方法调用之间保持不变。每次调用此方法时,您都会创建一个新的秒表,但它看起来应该在方法调用之间保持不变。使用:
var startTime = DateTime.Now;
... your code
var elapsed = DateTime.Now - startTime;
如何使用:
var startTime = DateTime.Now;
... your code
var elapsed = DateTime.Now - startTime;
您需要使用timeSpan.TotalMinutes,而不是timestamp.Minutes。请参阅文档您需要使用timeSpan.TotalMinutes而不是timestamp.Minutes。请参阅文档查看您在哪里申报秒表;这是一个局部变量。这意味着你正在创建和使用两个不同的秒表;第一个是在使用“true”参数调用方法时启动的,然后在方法结束且变量超出范围时处理。第二个是声明的,从未启动,然后检查并记录其时间
要解决此问题,请为秒表声明一个实例变量(“字段”)。只要对象还在,它就会保持在作用域中,这意味着它将在方法结束后继续运行,并且当您返回到它停止并检查它时,它仍然是相同的实例。查看您在哪里声明
秒表
;这是一个局部变量。这意味着你正在创建和使用两个不同的秒表;第一个是在使用“true”参数调用方法时启动的,然后在方法结束且变量超出范围时处理。第二个是声明的,从未启动,然后检查并记录其时间
要解决此问题,请为秒表声明一个实例变量(“字段”)。只要对象存在,它就会保持在作用域内,这意味着它将在方法结束后继续运行,并且当您返回到它停止并检查它时,它仍然是相同的实例。将秒表变量声明置于方法之外。将秒表变量声明置于方法之外
if(time == true)
{
stopwatch.Start();
}
if (time == false)
{
stopwatch.Stop();
...
}
如果time
为真,则只能启动秒表
如果它是假的,你永远不会启动它
更好的结构是:
if(time)
{
stopwatch.Start();
}
... //code to measure here
if (time)
{
stopwatch.Stop();
// log elapsed time
}
注:
如果您有一个布尔类型,则不会将其与true
或false
进行比较。直接使用它,如果你想反转它,只需使用代码>
如果time
为真,则只能启动秒表
如果它是假的,你永远不会启动它
更好的结构是:
if(time)
{
stopwatch.Start();
}
... //code to measure here
if (time)
{
stopwatch.Stop();
// log elapsed time
}
注:
如果您有一个布尔类型,则不会将其与true
或false
进行比较。直接使用它,如果你想反转它,只需使用
您的秒表
变量是本地变量。当您第二次调用该函数时,它将再次初始化
您需要将声明上移到类级别
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
public void GetTimeElapsed(string filePath, int logSelected, bool time, IUserOptions userOptions)
{
... etc
您的stopwatch
变量是本地变量。当您第二次调用该函数时,它将再次初始化
您需要将声明上移到类级别
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
public void GetTimeElapsed(string filePath, int logSelected, bool time, IUserOptions userOptions)
{
... etc
DateTime是计算运行时间的工具。@Brad Christie:谢谢你的链接。说得好。在这种情况下,OP似乎只会将经过的时间用于用户信息,因此可能足够精确。但再次感谢您指出这一点。DateTime是计算经过时间的工具。@Brad Christie:谢谢您的链接。说得好。在这种情况下,OP似乎只会将经过的时间用于用户信息,因此可能足够精确。再次感谢你指出这一点。这是什么类型的变量?或者如何在外部写入变量。。。我在想一些类似的问题。看答案。这是什么类型的变量?或者如何在外部写入变量。。。我在想一些类似的问题,看答案。