0

我有一个捆绑在 ISO 映像中的 Java 应用程序,它有一个用 c# 编写的启动器。当我通过 CD 启动应用程序时,等待时间很长,这让用户错误地认为应用程序没有启动。我试图在java应用程序中放置一个进度条并在程序一开始就调用它,但它失败了。所以我试图在启动器中启动进度条。

下面的启动器代码

程序.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);
}
}
}

请让我知道如何在此代码中添加进度条。

4

1 回答 1

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),但为此您必须能够知道第二个应用程序是否已启动,以便您可以有条件退出该无限循环。

于 2014-04-30T06:34:20.330 回答