执行操作时显示繁忙的加载器

Show busy loader while executing action

我修改了后台worker private AbortableBackgroundWorker _worker;

public class AbortableBackgroundWorker : BackgroundWorker
{
    //Internal Thread
    private Thread _workerThread;

    protected override void OnDoWork(DoWorkEventArgs e)
    {
        try
        {
            base.OnDoWork(e);
        }
        catch (ThreadAbortException)
        {
            e.Cancel = true; //We must set Cancel property to true! 
            Thread.ResetAbort(); //Prevents ThreadAbortException propagation 
        }
    }

    public void Abort()
    {
        if (_workerThread != null)
        {
            _workerThread.Abort();
            _workerThread = null;
        }
    }
}

并且有初始化BgWorker的方法

private void BusyLoader(Action doWorkAction)
    {
        if (_worker == null)
        {
            _worker = new AbortableBackgroundWorker();
            _worker.WorkerReportsProgress = true;
            _worker.WorkerSupportsCancellation = true;
            _worker.DoWork += (sender, e) => _worker_DoWork(sender, e, doWorkAction);
            _worker.RunWorkerCompleted += _worker_RunWorkerCompleted;
        }

        if (!_worker.IsBusy)
            _worker.RunWorkerAsync();
    }

private void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            loadingPanel.StopSpin();
            _worker.Abort();
            _worker.Dispose();
        }

        private void _worker_DoWork(object sender, DoWorkEventArgs e, Action action)
        {
            loadingPanel.StartSpin();
            this.Dispatcher.Invoke(action);
        }

当我调用方法BusyLoader时,我想向那里传递应该执行的Action,此时应该显示busy Indicator。

我试过了。它似乎有效,但仅适用于 BusyLoader 的首次调用。因为_worker.DoWork有同样的方法,据我了解

如何为 BusyLoader 的每个新调用更改 _worker.DoWork 方法?或者像那样传递 Action 是一种不好的方法?

你说有帮助所以会 post 评论作为答案

_worker 在第二次调用时不为空,因此 _worker_DoWork 未重新定义。尝试删除和添加。