C# 使用操作和参数集合处理BackGroundWorker继承的正确方法?

C# 使用操作和参数集合处理BackGroundWorker继承的正确方法?,c#,reflection,delegates,backgroundworker,C#,Reflection,Delegates,Backgroundworker,为了清理经常使用BackgroundWorker并使用相同设置的代码,我创建了以下类作为帮助器: public class MyBackGroundWorker : System.ComponentModel.BackgroundWorker { private Action _action; private Action _stopAction; publi

为了清理经常使用
BackgroundWorker
并使用相同设置的代码,我创建了以下类作为帮助器:

     public class MyBackGroundWorker : System.ComponentModel.BackgroundWorker
            {
                private Action _action;
                private Action _stopAction;    
                public List<dynamic> Parameters { get; set; } = new List<dynamic>();

                MyBackGroundWorker(Action method, Action doWhenFinished = null)
                {
                    this._action = method;
                    this._stopAction = doWhenFinished;
                    Init();

                }`
处理程序和
public
方法是:

            private void StartWork(object sender, DoWorkEventArgs e)
            {
                if (Parameters.Count() > 0)
                {

                    ParameterInfo[] pi = _action.Method.GetParameters();
                    //now i'm stuck!!!!!

                }
                else
                {
                    _action.Method.Invoke(null, this.Parameters);
                    //i know this is wrong, wrote it in to illustrate the goal
                }
            }

            private void WorkDone(object sender, RunWorkerCompletedEventArgs e)
            {
                _stopAction.Method.Invoke(null, null); //>.<
            }
            public void Go()
            {
                RunWorkerAsync();
            }

            public void Stop()
            {
                this.CancelAsync();
            }

为了解决这个问题,我查阅了一些涉及
委托的内容,但我知道这只是难题的一部分。从那以后,我在网上的搜索毫无结果,因为我不确定我需要研究什么方向。我该怎么办?这个想法本身可能存在根本性的缺陷,我愿意接受这一点,但是我能做些什么来实现我的目标,成为一个
后台工作人员
,这样就可以被调用方法简单地使用,根据我试图在后台运行的方法使用变量类型和参数计数时?

如果要有效地使BackgroundWorker接口冗余(即不需要使用DoWork事件、RunWorkerCompleted事件、RunWorkerAsync甚至CancelAsync)为什么不创建一个使用BackgroundWorker实例而不是从BackgroundWorker派生的新类呢?如果您想在可视化编辑器中使用组件,可以从组件派生新类。我想我也会遇到类似的难题。我需要能够在后台工作程序上执行这些方法,有些有参数,有些没有参数,并且无法预测参数的数据类型和参数的数量(即无需使用DoWork事件、RunWorkerCompleted事件、RunWorkerAsync甚至CancelAsync)为什么不创建一个使用BackgroundWorker实例而不是从BackgroundWorker派生的新类呢?如果您想在可视化编辑器中使用组件,可以从组件派生新类。我想我也会遇到类似的难题。我需要能够在后台工作程序上执行这些方法,有些带有参数,有些没有参数,并且参数的数据类型和参数的数量都无法预测。
            private void StartWork(object sender, DoWorkEventArgs e)
            {
                if (Parameters.Count() > 0)
                {

                    ParameterInfo[] pi = _action.Method.GetParameters();
                    //now i'm stuck!!!!!

                }
                else
                {
                    _action.Method.Invoke(null, this.Parameters);
                    //i know this is wrong, wrote it in to illustrate the goal
                }
            }

            private void WorkDone(object sender, RunWorkerCompletedEventArgs e)
            {
                _stopAction.Method.Invoke(null, null); //>.<
            }
            public void Go()
            {
                RunWorkerAsync();
            }

            public void Stop()
            {
                this.CancelAsync();
            }
using(var cmd = new MyBackGroundWorker(method1, StopLoadingSpinner))
{
  cmd.Parameters.Add("Stringparam");
  cmd.Parameters.Add(1);
  StartLoadingSpinner();
  cmd.Go();
}