如何在运行时提取多播委托的结果?

时间:2011-12-08 14:12:13

标签: c# delegates

不确定这是否可行,但我想知道如何捕获分配给同一委托(多播)的两个方法的返回。我基本上想知道是否有办法捕获每个返回值?也许我必须迭代它,不是很确定..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MutiCastDelegate2
{
    class Program
    {

        delegate string HelloWorldDelegate();

        static void Main(string[] args)
        {
            HelloWorldDelegate myDel1 = ReturnHelloWorld;
            HelloWorldDelegate myDel2 = ReturnHelloWorld2;
            HelloWorldDelegate myMultiDelegate = myDel1 + myDel2;

            Console.WriteLine(myMultiDelegate());
            Console.ReadLine();
        }


        public static string ReturnHelloWorld()
        {
            return "Return Hello World";
        }

        public static string ReturnHelloWorld2()
        {
            return "Return Hello World 2";
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用MulticastDelegate.GetInvocationList()来访问列表中的每个代理,然后您只需调用每个代理并检索结果:

var delegates = myMultiDelegate.GetInvocationList();
foreach (var d in delegates)
{
    string result = (string) d.DynamicInvoke();
}