在Backgroundworker运行完成后关闭“正在加载”表单

时间:2015-01-20 07:55:25

标签: c# backgroundworker

我有一个表格接受用户的某些输入。 当用户点击"确定"时,我将用户输入的输入插入到设置中并存储它。此过程以主表格完成,有点长(约15秒)

所以我在后台工作者中做这项工作。

以下是我的代码:

frmProgress progressBar ;

private void SomeMethod()
{
        if (frm.ShowDialog(this) == DialogResult.OK)
        {                
            List<Criteria> selectedCriterias = new List<Criteria>(frm.SelectedCriteria);
            bool isOverWriteExistingCriteria = frm.IsOverwriteExistingCriteria;
            object[] args = new object[] {selectedCriterias, isOverWriteExistingCriteria};

            // STart Background worker
            backgroundFillCriteria.RunWorkerAsync(args);

            // Display my progressForm
            progressBar = new frmProgress("Updating Specified Criteria. . .");
            if (progressBar != null && !progressBar.IsDisposed)
                progressBar.ShowDialog();
        }
}

private void backgroundFillCriteria_DoWork(object sender, DoWorkEventArgs e)
{
        object[] args = e.Argument as object[];
        List<Criteria> scanAlertCriterias = args[0] as List<Criteria>;
        bool isOverwriteExistingCriteria = (bool)args[1];

        UpdateCriteria(scanCriterias, isOverwriteExistingCriteria);
}

private void (List<Criteria> scanCriterias, bool isOverwriteExistingCriteria)
{
// Does all processing
}

private void backgroundCriteria_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
    {
        try
        {
            if (progressBar != null)
            {
                progressBar.Close();
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
        }
    }

我的问题是 - 我的Criterias已更新 - 但Application挂起在Progressform上。我无法继续

我想我是以错误的方式处理它!

请帮助!!

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题......我正在更新datagridview - UI - 来自backgroundworker的mainform的一部分,它正在创建问题!

我是编码的新手,因此犯了这样的错误。

感谢大家的帮助!