Reputation: 1188
I'm very new using Background worker, What I'm trying to do is load a form that is saying "Sending files" and then when it finish close that form but I don't know how to call or close the Background Worker. What I have is the following piece of code:
bwSendingFiles.RunWorkerAsync();
switch (dgvFile.SelectedRows[0].Cells[1].Value.ToString().Trim())
{
case "S":
SendFile.FilesSFTP_FTP();
break;
case "F":
SendFile.FilesSFTP_FTP();
break;
case "E":
SendFile.SendFileEmail();
break;
}
bwSendingFiles.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwSendingFiles_RunWorkerCompleted);
And this is what I have in the events:
private void bwSendingFiles_DoWork(object sender, DoWorkEventArgs e)
{
formOpen = new SendingScreen();
formOpen.ShowDialog();
}
private void bwSendingFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
formOpen.Close();
}
How do I stop the background worker once it finish with the Method?
Upvotes: 1
Views: 910
Reputation: 308
A couple points:
The DoWork method is executed on another thread, while the RunWorkerCompleted method is triggered on the main thread once DoWork is done;
I'd say that you should be creating formOpen
on the main (UI) thread and then doing you work (sending files) on your main thread. You shouldn't be doing things to UI elements directly from different threads, instead use the BeginInvoke method:
formOpen.BeginInvoke(new Action(() =>
{
formOpen.Close();
}));
I'd be doing it more like this:
bwSendingFiles.DoWork += new RunWorkerCompletedEventHandler(bwSendingFiles_DoWork);
bwSendingFiles.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwSendingFiles_RunWorkerCompleted);
formOpen = new SendingScreen();
formOpen.ShowDialog();
bwSendingFiles.RunWorkerAsync(dgvFile.SelectedRows[0].Cells[1].Value.ToString().Trim());
private void bwSendingFiles_DoWork(object sender, DoWorkEventArgs e)
{
var arg = (string)e.Argument
switch (arg)
{
case "S":
SendFile.FilesSFTP_FTP();
break;
case "F":
SendFile.FilesSFTP_FTP();
break;
case "E":
SendFile.SendFileEmail();
break;
}
}
private void bwSendingFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
formOpen.Close();
}
Upvotes: 1