如何停止后台辅助角色以触发事件 RunWorker 已完成



我是使用后台工作者的新手,我正在尝试做的是加载一个显示"发送文件"的表单,然后在它完成后关闭该表单,但我不知道如何调用或关闭后台工作线程。我拥有的是以下代码段:

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);

这就是我在事件中所拥有的:

private void bwSendingFiles_DoWork(object sender, DoWorkEventArgs e)
{
    formOpen = new SendingScreen();
    formOpen.ShowDialog();            
}
private void bwSendingFiles_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{                        
    formOpen.Close();            
}
使用

方法完成后,如何停止后台工作线程?

几点:

    DoWork 方法在另一个线程上
  • 执行,而 RunWorkerCompleted 方法在 DoWork 完成后在主线程上触发;

  • 我想说你应该在主线程(UI)上创建formOpen,然后在主线程上做你的工作(发送文件)。您不应该直接从不同的线程对 UI 元素执行操作,而应使用 BeginInvoke 方法:

    formOpen.BeginInvoke(new Action(() =>
    {
        formOpen.Close();
    }));
    

我会做得更像这样:

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();            
}

最新更新