识别分配给DoWork的方法

时间:2018-07-26 21:22:28

标签: c# backgroundworker

我继承了使用后台工作程序的应用程序。在整个应用程序过程中,为DoWork分配了多个功能,或从其中删除了多个功能(请参见下文)。是否有可以调用的属性或方法来评估当前分配给DoWork函数的方法,或者这是应用程序应该跟踪的东西吗?

例如:

worker.DoWork += method1;

{ Run some code }

worker.DoWork -= method1;

worker.DoWork += method2;

{ Run some code }

worker.DoWork -= method2;

2 个答案:

答案 0 :(得分:-1)

您可以写一个custom event accessor。当然,由于它是自定义的,您最终需要自己进行跟踪,但是这是您可以执行的方法。

class MyClass
{
    protected readonly List<EventHandler> list = new List<EventHandler>();

    public event EventHandler DoWork
    {
        add
        {
            list.Add(value);
        }
        remove
        {
            list.Remove(value);
        }
    }

    public void RaiseDoWork()
    {
        var args = new EventArgs();
        foreach (var func in list)
        {
            func(this, args);
        }
    }

    public IEnumerable<EventHandler> GetDoWorkDelegates()
    {
        return list;
    }
}


public class Program
{
    public static void HandleDoWork(object sender, EventArgs e)
    {
        Console.WriteLine("Event fired.");
    }

    public static void Main()
    {
        var c = new MyClass();
        c.DoWork += HandleDoWork; 
        c.RaiseDoWork();

        foreach (var d in c.GetDoWorkDelegates())
        {
            Console.WriteLine("Method name was {0}.", d.Method.Name);
        }
    }
}

输出:

Event fired.
Method name was HandleDoWork.

Working example on DotNetFiddle

注意:如果您希望以上内容是线程安全的,则需要更多代码。

答案 1 :(得分:-2)

使用事件而不是仅仅使用委托的全部目的是,它专门防止该类型外部的任何代码,而不执行除添加或删除处理程序之外的任何操作。您既不能调用也不能检查添加到事件中的所有处理程序。