0

我想知道Loading Time当用户启动进程、应用程序实例时如何测量应用程序,以便我可以显示进度条或通知用户在加载应用程序时发生了什么或完成了多少应用程序加载。

我的意思是,如果我想用进度条显示当前进度,我想我可以用数字定义当前进程,这样我就可以增加控件的Value属性。ProgressBar

提前致谢。

真挚地。

编辑 :

我发现的解决方案是:

您可以使用 System.Diagnostics.Stopwatch 来测量时间。在窗体的构造函数的开头调用 Start 方法。

显示表单后,通常会出现 Application.Idle 事件。因此,您可以在此事件的处理程序中调用 Stop 方法。但是您应该检查该事件是否确实上升,例如通过使用 System.Diagnostics.Debug.WriteLine 以及来自 sysinternals.com 的工具 DebugView。

所以我们可以这样使用System.Diagnostics.StopWatch

using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        Thread.Sleep(10000);
        stopWatch.Stop();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
        Console.WriteLine(elapsedTime, "RunTime");
    }
}

然后当 Idle 事件触发时,我将能够找到加载时间并将其显示在进度条上,但我认为进度条不会显示加载时间的准确百分比。

4

5 回答 5

5

您的进度条不太可能是剩余时间的真实指示。一种常见的方法是使用完成的“步骤”数来完成加载。

假设您必须运行 3 个方法,每个方法还有 2 个子方法。这使它成为 6。使用 6 步进度条。如果您基于试错,确定哪个“步骤”可能需要更长的时间,并为它们分配更多的“步数”

于 2009-10-22T00:15:36.450 回答
1

这取决于。

您的应用程序正在加载什么,为什么需要时间?

一种选择是跟踪启动程序需要多长时间,并使用该持续时间来设置未来的进度条。(这应该在运行时完成并存储在某个地方,因为它会随着机器的速度而变化)

如需更具体的答案,请告诉我们您正在加载什么。

于 2009-10-22T00:15:04.673 回答
1

通常,此示例中的进度条不是加载时间的函数,而是加载任务。

您需要查看应用程序在启动时所做的工作,并为每个步骤分配百分比值。这些值不需要是任意的。相反,在你自己的机器上做一些指标来确定这些任务通常需要多长时间,然后用它来确定你的百分比。

于 2009-10-22T00:16:52.143 回答
1

我刚刚问了一个非常相似的问题,但我没有使用 ProgressBar,而是使用标签来显示负载百分比。过去,ProgressBars 一直非常不可靠。你可以在这里找到我的帖子:

C# - 显示在 4 秒内加载 1-100%

于 2009-10-22T00:17:21.923 回答
0

您应该具有在程序启动时检查程序中的记录或值的功能。然后只需使用 Timer 以及timer_Tick()将您的功能放入的属性功能,timer_tick()然后只需花费所需的时间即可打开您的程序。

private void Button1_Click(object sender, EventArgs e)
{
    timer1.Start();


}

private void timer1_Tick(object sender, EventArgs e)
{
    ProgressBar1.Value += 1;

    if(ProgressBar1.Value==100)
    {
        timer1.Stop();
        Form1 f1 = new Form1();
        this.Hide();
        f1.Show();
    }
}
于 2018-06-25T15:52:24.290 回答