双击.exe时C#中的进度条

时间:2014-04-30 06:22:40

标签: c# java visual-studio-2010 launcher java-launcher

我有一个捆绑在ISO映像中的Java应用程序,它有一个用c#编写的启动器。 当我通过CD启动应用程序时,有一个很长的等待期,这给用户错误的概念,即应用程序没有启动。我试图在java应用程序中放入一个进度条,并在程序的最开始调用它但它失败了。所以我想在启动器中启动进度条。

下面的启动码

Program.cs的

using System.Security.Principal;
using System.Diagnostics;

namespace RunMyprogram
{
static class Program
    {
 static void Main(string[] args)
        {
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.CreateNoWindow = true;
                startInfo.UseShellExecute = false;
                startInfo.FileName = System.AppDomain.CurrentDomain.BaseDirectory + @"/myBatFile.bat";
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                startInfo.Verb = "runas";
                Process.Start(startInfo);
}
}
}

请告诉我如何在此代码中添加进度条。

1 个答案:

答案 0 :(得分:0)

开始一个新线程,在该线程上显示进度为添加点。由于应用程序无法知道当前执行的状态,我们无法显示进度条,说明完成了多少%。

你可以做的是展示一个无休止的进度选项,其中包含“启动应用程序,这可能需要10分钟......感谢您的耐心等待。”

此代码如下所示:

using System.Security.Principal;
using System.Diagnostics;
using System.Threading;   // for ThreadStart delegate and Thread class
using System;             // for Console class

namespace RunMyprogram
{
    static class Program
    {
        static void Main(string[] args)
        {
                ThreadStart ts = new ThreadStart(ShowProgress);
                Thread t = new Thread(ts);
                t.Start();

                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.CreateNoWindow = true;
                startInfo.UseShellExecute = false;
                startInfo.FileName = System.AppDomain.CurrentDomain.BaseDirectory + @"/myBatFile.bat";
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                startInfo.Verb = "runas";
                Process.Start(startInfo);

                t.Join();
        }

        static void ShowProgress()
        {
            // This function will only show user that the program is running, like aspnet_regiis -i shows increasing dots.

           Console.WriteLine(""); //move the cursor to next line
           Console.WriteLine("Launching the application, this may take up to 10 minutes..... Thanks for your patience.");

           // 10 minutes have 600 seconds, I will display 'one' dot every 2 seconds, hence the counter till 300
           for(int i = 0; i < 300; i++)
           {
               Console.Write(". ");
               Thread.Sleep(2000);
           }
        }
    }
}

而不是for(int i = 0; i < 300; i++)你也可以使用while(true)(无限)循环,但为此你必须能够知道第二个应用程序是否已经启动,这样你才能拥有一个条件离开那无尽的循环。