如何让时间流逝?

时间:2011-05-05 15:52:37

标签: c# runtime stopwatch

我需要一种方法,让我花费一些时间来完成我的过程。我在启动过程中调用它并在完成该过程时再次调用它,该方法将打印已用完的总时间。

这是我的方法,但始终在00:00打印时间。为什么会发生这种情况?

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);

        }           
    } 

7 个答案:

答案 0 :(得分:2)

看看你宣布stopwatch的地方;这是一个局部变量。这意味着您正在创建和使用两种不同的秒表;第一个是在使用“true”参数调用方法时启动,然后在方法结束且变量超出范围时处理掉。第二个是声明的,从未开始,然后检查并记录它的时间。

要解决此问题,请为秒表声明一个实例变量(“field”)。只要对象在周围,这将保持在范围内,这意味着它将在方法结束后继续运行,并且当您返回到它以停止并检查它时仍将是相同的实例。

答案 1 :(得分:1)

每次调用此方法时,您都会创建一个新的秒表,但看起来应该在方法调用之间保持不变。

答案 2 :(得分:1)

在方法之外采取秒表变量声明。

答案 3 :(得分:1)

您的stopwatch变量是本地变量。当您第二次调用该函数时,它会再次初始化。

您需要将声明升级到班级。

System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

public void GetTimeElapsed(string filePath, int logSelected, bool time, IUserOptions userOptions)
{
   ... etc

答案 4 :(得分:0)

如何使用:

var startTime = DateTime.Now;

... your code

var elapsed = DateTime.Now - startTime;

答案 5 :(得分:0)

    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
}

注意:

如果您有布尔类型,则将其与truefalse进行比较。只需直接使用它,如果你想反转它,只需使用!

答案 6 :(得分:-1)

您需要使用timeSpan.TotalMinutes而不是timestamp.Minutes。请参阅timespan文档