【问题标题】:Close busy form when background-worker is complete?后台工作人员完成后关闭繁忙表格?
【发布时间】:2014-03-09 04:07:40
【问题描述】:

我有一个应用程序,它在忙碌时会打开一个忙碌的表单 (FormWaitingForm) 以向用户指示该应用程序很忙。如何在事件 backgroundWorker1_RunWorkerCompletedbelow 中关闭 FormWaitingForm ?

private void radButtonCheckFiles_Click(object sender, EventArgs e)
        {
                    var bw = new BackgroundWorker();

                    // define the event handlers
                    bw.DoWork += new DoWorkEventHandler(ProcessTickTemp);

                    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);

                    bw.RunWorkerAsync(); // starts the background worker

                    // execution continues here in parallel to the background worker


                    using (var FormWaitingForm = new WaitingForm()) //  
                    {
                        var result = FormWaitingForm.ShowDialog();

                    }
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
             // How do i close FormWaitingForm here ?
        }

【问题讨论】:

    标签: c# backgroundworker


    【解决方案1】:

    你可以试试这样的。在 click 方法之外保留对表单的引用,然后以非模态方式打开它(这样您就不必等待用户关闭它)。

    WaitingForm formWaitingForm;
    
    private void radButtonCheckFiles_Click(object sender, EventArgs e)
    {
        // background code here
    
        formWaitingForm = new WaitingForm();
        formWaitingForm.Show();
    }
    
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        formWaitingForm.Close();
        formWaitingForm.Dispose();
    }
    

    如果用户不等你就关闭等待表单,你必须添加一些代码来处理。

    也就是说,我通常实现等待/进度类型表单的方式是将后台进程合并到进度表单本身并显示类似进度条的东西。

    This link 可能会给你更多的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多