Как использовать Background Worker ProgressChanged - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно обновить программу, которую я сделал, когда еще 3 месяца был в офисе.И я обнаружил, что код не чистый и его нелегко изменить.

Я сделал так, чтобы каждый метод вызывался в фоновом режиме.И я создал несколько фоновых рабочих для каждой задачи, которая может быть выполнена сразу.

Поэтому я планирую сделать код чище и проще в обслуживании.

Я создал класс и унаследовал BackgroundWorkerкак показано ниже в моем коде

public class Bgw : BackgroundWorker
    {
        BackgroundWorker worker;
        public int ProcessId { get; set; }
        public object[] ProcessData { get; set; }

        public Bgw(int i, object[] obj)
        {
            ProcessId = i;
            ProcessData = obj;
            worker = new BackgroundWorker();

            worker.DoWork += Worker_DoWork;
            worker.WorkerSupportsCancellation = true;
            worker.WorkerReportsProgress = true;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
            worker.ProgressChanged += Worker_ProgressChanged;

            worker.RunWorkerAsync();
        }

        public void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {

        }

        public void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

        }

        public void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (ProcessId == 1)
            {
                //executed my code here
            }
        }
    }

Но с кодом выше.Как я могу уведомить об изменениях в моих элементах управления, если я вызываю класс следующим образом

var obj = new object[3];
                obj[0] = 1;
                obj[1] = PdfPath;
                obj[2] = EpubPath;
                var work = new Bgw(1, obj);

Или есть ли лучший способ сделать это?Я знаю, что мне нужно использовать ProgressChanged.Но как я могу получить эти изменения от того, где я назвал этот класс?

Спасибо

Редактировать: Если я собираюсь использовать async и ждать, как это

class Program
{


    public async static void TestAsyncAwaitMethods()
    {
        await Task.Run(() =>
        {
            for (var i = 0; i <= 5000000; i++)
            {
                UpdateUI(i);

            }
        });
    }

    private static void UpdateUI(int i)
    {
        Console.WriteLine("Update the UI: " + i);
    }

}

Ивызовите метод TestAsyncAwaitMethods ()

Как я могу обновить свой графический интерфейс.Когда метод находится в другом классе, а свойство, которое я хочу обновить, находится в другом классе (я использую шаблон mvvm).

...