Создать экземпляры необходимых обработчиков событий
Поместите обработчики событий в конструктор формы. Например:
public Form1()
{
InitializeComponent(); // Standard initialization component method...
backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
}
Использование DoWork И событий RunWorkerCompleted
Способ, которым вы использовали 'worker.DoWork + = worker_DoWork;' должен быть расширен с помощью события «RunWorkerCompleted». Событие DoWork для операции и RunWorkerCompleted для обработки завершенной операции. Это событие также полезно, когда вы хотите использовать отмену или обработку исключений. Это также вызывается автоматически, поэтому нет необходимости в специальном методе changeErrorText. Пример кода:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = e.Result.ToString();
}
Вам не нужно использовать делегата для передачи параметров
Параметры можно передавать так, как вы написали RunWorkAsyn c. Единственное, что вы можете сделать, это поместить этот метод в событие (щелчок). Например:
private void button1_Click(object sender, EventArgs e)
{
int value = 123; // example input
backgroundWorker1.RunWorkerAsync(argument: value);
}
Полный код c:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
}
private void button1_Click(object sender, EventArgs e)
{
int value = 123;
backgroundWorker1.RunWorkerAsync(argument: value);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string output = e.Argument.ToString();
e.Result = output;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = e.Result.ToString();
}
}
Надеюсь, я помог вам с приведенными выше пояснениями.
Источники
- Отправка аргументов фоновому исполнителю? ;
- https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?view=netcore-3.1