C#在后台工作者的课堂上打开一个模态表格

时间:2014-01-26 19:15:14

标签: c# winforms backgroundworker

我正在尝试创建一个可以在任何地方使用的类,它运行后台工作进程,如果正在运行,将打开一个模式表单,显示它的进度,其他表单不可用但很难处理它出。以为我可以做到以下几点,但似乎没有用。还有其他想法吗?

我可能会采用完全错误的方式,但这是我的缩减代码:

public partial class Main : Form
{
    public Main()
    {
        // load the database
        Database.Load(this);

        InitializeComponent();
    }
}

namespace Blah.Common
{
public static class Database
{
    private static Progress progressForm = new Progress();
    public static void Load(Form parentForm)
    {
        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;

        bw.DoWork += (obj, e) => bw_DoWork(parentForm);
        bw.RunWorkerAsync();
    }

    private static void bw_DoWork(Form parentForm)
    {
        progressForm.ShowDialog(parentForm);
        progressForm.UpdateLabel("Loading...");

        doHeavyProcess();
        progressForm.Dispose()
    }
 }
 }

1 个答案:

答案 0 :(得分:1)

ShowDialog()是一个阻止调用,在关闭对话框之前,BGW将无法继续运行。

在工作线程上显示UI 始终错误,对您的程序产生长期影响,使其在very undiagnosable way中随机挂起。在RunWorkerAsync()调用之后,必须在UI线程中创建进度对话框。使用ProgressChanged事件更新它。