Как увеличить индикатор выполнения WinForms на основе конкуренции функций? - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблемы с увеличением моего индикатора выполнения.Я хотел бы, чтобы оно увеличивало определенное значение после завершения каждой функции.Все примеры, на которые я смотрел, имеют функции, которые НЕ принимают никаких параметров.Это то, что у меня есть

    public partial class TaskProgress: Form
        {
            public TaskProgress(string parameter, string parameter2, string parameter3)
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, System.EventArgs e)
            {
                // Start the BackgroundWorker.
               backgroundWorker1.WorkerReportsProgress = true;
                progressBar1.Value = 0;
                backgroundWorker1.RunWorkerAsync();
            }

            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                /*for (int i = 1; i <= 100; i++)
                {    Thread.Sleep(100);
                    backgroundWorker1.ReportProgress(i);}*/

                  function1(parameter1);
                  backgroundWorker1.ReportProgress(20);
                  function2(parameter2);
                  backgroundWorker1.ReportProgress(60);
                  function3(parameter3);
                  backgroundWorker1.ReportProgress(100);
            }

            private void backgroundWorker1_ProgressChanged(object sender,
                ProgressChangedEventArgs e)
            {
                // Change the value of the ProgressBar to the BackgroundWorker progress.
                progressBar1.Value = e.ProgressPercentage;
                // Set the text.
                this.Text = "Progress: " + e.ProgressPercentage.ToString() + "%";
            }
    }

Как передать значения параметров в function1, function2 и function3?Способ, которым параметр 1, 2, 3 передается прямо сейчас в функцию 1, 2, 3, неверен, поскольку эти значения не определены в функции фонового работника.Параметры 1,2,3 являются динамическими и передаются при создании класса TaskProgress.

Или есть другой способ увеличить индикатор выполнения на основе конкуренции моих функций?

Я посмотрелв этом примере, но функции внутри backgroundworker_dowork () не нуждаются в дополнительных параметрах Как использовать индикатор выполнения WinForms?

Я не могу вызвать ReportProgress ();вне backgroundWorker1_DoWork из-за следующего кода в моем коде Form.cs [Design]:

  // 
  this.backgroundWorker1.WorkerReportsProgress = true;
  this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
  this.backgroundWorker1.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
  // 

Я также не могу изменить количество аргументов, которые backgroundWorker1_DoWork () принимает

Ранее то, что у меня было

      public partial class TaskProgress: Form
        {
            public TaskProgress(string parameter, string parameter2, string parameter3)
            {
                InitializeComponent();
                function1(parameter1);
                function2(parameter2);
                function3(parameter3);
            }

            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                for (int i = 1; i <= 100; i++)
                {    Thread.Sleep(100);
                    backgroundWorker1.ReportProgress(i);}
            }
       }

Но индикатор выполнения просто сдвинулся сам по себе;независимо от того, когда функции завершены

1 Ответ

0 голосов
/ 21 февраля 2019

Мне кажется, что ваш самый простой подход заключается в следующем:

public partial class TaskProgress : Form
{
    private string parameter = null;
    private string parameter2 = null;
    private string parameter3 = null;

    public TaskProgress(string parameter, string parameter2, string parameter3)
    {
        InitializeComponent();
        this.parameter = parameter;
        this.parameter2 = parameter2;
        this.parameter3 = parameter3;
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        function1(this.parameter1);
        backgroundWorker1.ReportProgress(20);
        function2(this.parameter2);
        backgroundWorker1.ReportProgress(60);
        function3(this.parameter3);
        backgroundWorker1.ReportProgress(100);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...