我有一个捆绑在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);
}
}
}
请告诉我如何在此代码中添加进度条。
答案 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)
(无限)循环,但为此你必须能够知道第二个应用程序是否已经启动,这样你才能拥有一个条件离开那无尽的循环。