Некоторый код про BackgroundWorker из. net документов на Microsoft, у меня мало вопросов - PullRequest
0 голосов
/ 24 апреля 2020

Это пример кода с сайта net docs на Microsoft. Ссылка: https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?view=netframework-4.8

Есть строка «BackgroundWorker worker = отправитель как BackgroundWorker», свойство «WorkerReportsProgress» для этого работника должно быть «false» по умолчанию, а программа - Предположим, не работать. Но программа работает нормально, поэтому «WorkerReportsProgress» имеет значение «true». Почему?

Официальная инструкция: Свойство BackgroundWorker.WorkerReportsProgress

Я попытался изменить его на «BackgroundWorker worker = new BackgroundWorker ()», затем запустить программу, нажать « Кнопку «Пуск» и вызывает исключение. «Свойство WorkerReportsProgress установлено в значение false.»

Запустите программу и получите это

Моя точка зрения: я не сделал • установите свойство «WorkerReportsProgress» вручную ,, чтобы оно оставалось значением по умолчанию «false», но эта программа работает нормально, поэтому на самом деле это «true». Почему это не значение по умолчанию?

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace BackgroundWorkerSimple
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
        }

        private void startAsyncButton_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy != true)
            {
                // Start the asynchronous operation.
                backgroundWorker1.RunWorkerAsync();
            }
        }

        private void cancelAsyncButton_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.WorkerSupportsCancellation == true)
            {
                // Cancel the asynchronous operation.
                backgroundWorker1.CancelAsync();
            }
        }

        // This event handler is where the time-consuming work is done.
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            for (int i = 1; i <= 10; i++)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    // Perform a time consuming operation and report progress.
                    System.Threading.Thread.Sleep(500);
                    worker.ReportProgress(i * 10);
                }
            }
        }

        // This event handler updates the progress.
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            resultLabel.Text = (e.ProgressPercentage.ToString() + "%");
        }

        // This event handler deals with the results of the background operation.
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                resultLabel.Text = "Canceled!";
            }
            else if (e.Error != null)
            {
                resultLabel.Text = "Error: " + e.Error.Message;
            }
            else
            {
                resultLabel.Text = "Done!";
            }
        }
    }
}
...