如何使用后台工作者加载表单? C#

How to use background worker to loading a form? c#

单击按钮后如何使用后台工作程序加载表单?我要使用它,因为我的表单加载大约需要 20-30 秒。请帮助我。

这是一个来自简单表单项目的示例实现 class。我正在使用同步上下文将进度更新编组到 UI 线程。在构造函数中,它获取当前 UI 线程的上下文,因此它可以在后台工作线程中使用以提供状态更新。

我还向您展示了如何取消 运行 后台工作程序。

public partial class Form1 : Form
{
    BackgroundWorker _worker = new BackgroundWorker();
    SynchronizationContext _syncContext;

    public Form1()
    {
        InitializeComponent();
        _syncContext = SynchronizationContext.Current;
    }

    private void btnLoadForm_Click(object sender, EventArgs e)
    {
        _worker.WorkerReportsProgress = true;
        _worker.WorkerSupportsCancellation = true;
        _worker.DoWork += new DoWorkEventHandler(HandleDoWork);
        _worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(HandleWorkerCompleted);
        _worker.ProgressChanged += new ProgressChangedEventHandler(HandleProgressChanged);
        _worker.RunWorkerAsync();
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        if (_worker.WorkerSupportsCancellation)
        {
            _worker.CancelAsync();
        }
    }

    private void HandleDoWork(object sender, DoWorkEventArgs e)
    {
        // DO Any work to instantiate the form
        System.Threading.Thread.Sleep(2000);

        if (_worker.CancellationPending)
        {
            e.Cancel = true;
        }
        else
        {
            Form2 newForm = new Form2();
            newForm.ShowDialog();
        }
    }

    private void HandleProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        // DO Progress Bar Updates Here
        SendOrPostCallback callback = new SendOrPostCallback((o) =>
        {
            label1.Text = "This is my Async content";
        });
        _syncContext.Send(callback, null);
    }

    private void HandleWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // DO Any completed step items here
    }

}