Как отобразить прогресс загрузки шоколада в прогресс-бар в c# - PullRequest
0 голосов
/ 17 апреля 2020

Я заставил программу c# запустить команду для установки veracrypt with chocolatey и вывести вывод команды в текстовый файл, затем моя программа c# читает текстовый файл и отображает прогресс в прогресс-бар, но это не так вместо этого работает и замораживает программу

Пример вывода:

Chocolatey v0.10.15
Installing the following packages:
veracrypt
By installing you accept licenses for the packages.
veracrypt v1.24.20200126 already installed. Forcing reinstall of version '1.24.20200126'. 
 Please use upgrade if you meant to upgrade to a new version.



Progress: 0% - Saving 45.52 KB of 34.56 MB
Progress: 0% - Saving 84.58 KB of 34.56 MB
Progress: 0% - Saving 120.98 KB of 34.56 MB
Progress: 0% - Saving 159.85 KB of 34.56 MB
Progress: 0% - Saving 193.01 KB of 34.56 MB
Progress: 0% - Saving 233.01 KB of 34.56 MB
Progress: 0% - Saving 273.01 KB of 34.56 MB
Progress: 0% - Saving 313.01 KB of 34.56 MB
Progress: 0% - Saving 353.01 KB of 34.56 MB
Progress: 1% - Saving 393.01 KB of 34.56 MB

Этот код считывает вывод, когда установка выполняет свою работу

private bool Stop = false;
private async Task RunNotes()
        {
            var i = 0;
            while(!File.Exists(Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\Output.txt"))
            {
                await Task.Delay(10);
            }

            while (Stop == false)
            {
                try
                {
                    foreach (var readLine in File.ReadLines(Environment.GetEnvironmentVariable("USERPROFILE") +
                                                            "\\Documents\\Output.txt"))
                    {
                        var Percent = readLine.Split(':')[1].Trim().Split('%')[0].Trim();
                        progressBar1.Value = Int32.Parse(Percent);
                        Console.WriteLine(Percent);
                    }
                }
                catch
                {

                }
            }
        }

Но зависает вместо этого запрограммируйте

приведенный ниже код делает пакетный файл шоколадной установки:

public async Task RunCommandHidden(string Command)
        {
            string[] CommandChut = { Command };
            File.WriteAllLines(System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\RunCommand.bat", CommandChut);
            Process C = new Process();
            C.StartInfo.FileName = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\RunCommand.bat";
            C.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
            C.EnableRaisingEvents = true;
            C.Exited += C_Exited;
            C.Start();
            if (InstallSoftware == true)
            {
            }

            InstallSoftware = false;

            while (Exit == false)
            {
                await Task.Delay(10);
            }

            Exit = false;
        }
Timer t = new Timer();
        private bool Failed = false;
        private async Task CheckTimeout()
        {
            Failed = true;
            t.Interval = 5000;
            t.Tick += T_Tick;
            t.Start();
        }

        private void T_Tick(object sender, EventArgs e)
        {
            Failed = false;
            t.Stop();
        }
private async void button1_Click(object sender, EventArgs e)
        {
            Stop = false;
            CheckTimeout();
            label1.Text = "Software Installation In Progress";
            panel1.Visible = false;
            ControlBox = false;
            SoftwareNameInstallationTextBox.Text = SoftwareNameInstallationTextBox.Text.ToLower();
            InstallSoftware = true;
            RunNotes();
            await RunCommandHidden(">%userprofile%\\Documents\\Output.txt (\ncd C:\\ProgramData\\chocolatey \nchoco.exe install " + SoftwareNameInstallationTextBox.Text + " --force -y\n)");
           panel1.Visible = true;
           ControlBox = true;
           if (Failed == false)
           {
               SoftwareSuccessSound();
           }
           else
           {
               SoftwareFailedSound();
           }
           Stop = true;
           label1.Text = "Ready To Use!";
        }

Я что-то не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...