передать обратный вызов в метод класса, созданный отражением - PullRequest
0 голосов
/ 22 февраля 2019

Я тестирую концепцию, у меня есть делегат:

 public delegate void PushMessageDelegate(string message);

У меня есть проект dll с методом, который имеет этот тип в качестве обратного вызова:

  public void RunReduction(PushMessageDelegate postMessage)
    {
        try
        {
            postMessage("Error Message");
            postMessage("Warning Message");
            postMessage("Info Message");
        }catch(Exception ex)
        {

            Debug.Print(ex.Message);

        }

    }        

У меня естьтестовое консольное приложение, которое использует отражение для загрузки проекта dll.Он также передает метод «PublishMessage» в ссылку на метод.

 static void Main(string[] args)
    {
        Assembly reductionDLL = Assembly.LoadFrom(@"C:\\\...Reduceable.dll");
        string[] fullNameStrings = reductionDLL.FullName.Split(new char[] { ',' });
        string assemblyName = fullNameStrings[0];
        Type reductionClass = reductionDLL.GetType(assemblyName + ".ReductionCode");

        object obj = reductionDLL.CreateInstance(reductionClass.FullName);

        MethodInfo mi = reductionClass.GetMethod("RunReduction");

        mi.Invoke(obj, new object[1]{ (IReduce.PushMessageDelegate)PublishMessage });            

        Console.ReadLine();                                    
    }

    private static void PublishMessage(string message)
    {
        Console.WriteLine(message);
    }

Работает, но в mi.Invoke (....) этот код:

  postMessage("Error Message");
            postMessage("Warning Message");
            postMessage("Info Message");

Выполняет первое postMessage («Сообщение об ошибке»), возвращается в PublishMethod и отображает его на консоли.Все хорошо до этого момента, но он не возвращается к RunReduction и не выполняет postMessage («Предупреждающее сообщение»).Кажется, Invoke не то, что мне нужно.Мне нужно что-то, что передает ссылку на RunReduction, я думаю.Я заранее благодарен за помощь.

...