【问题标题】:Error binding to target method in C#3.0在 C#3.0 中绑定到目标方法时出错
【发布时间】:2010-10-05 14:43:31
【问题描述】:

我正在尝试使用反射连接委托。这就是我到目前为止所做的事情

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
using System.Threading;
using System.IO;
using System.Reflection;
using System.Windows;

namespace ChartHelper
{
    public class ICChartHelper
    {        

        public void RefreshChart()
        {
            try
            {   
                Assembly myobj = Assembly.LoadFrom(@"C:\sample.dll");

                foreach (Type mytype in myobj.GetTypes())
                {

                    if (mytype.IsClass == true)
                    {
                        if (mytype.FullName.EndsWith("." + "ICAutomationProxy"))
                        {
                            // create an instance of the object
                            object ClassObj = Activator.CreateInstance(mytype);

               //  var eventTypes = mytype.GetEvents();

                            EventInfo evClick = mytype.GetEvent("OnRefreshCompleted");
                            Type tDelegate = evClick.EventHandlerType;

                            MethodInfo miHandler =
                           typeof(ChartHelper.ICChartHelper)
                           .GetMethod("RefreshApplication",
                            BindingFlags.NonPublic | BindingFlags.Instance);

                            Delegate d = Delegate.CreateDelegate(tDelegate,typeof(ChartHelper.ICChartHelper), miHandler);

                            MethodInfo addHandler = evClick.GetAddMethod();
                            Object[] addHandlerArgs = { d };
                            addHandler.Invoke(ClassObj, addHandlerArgs);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void RefreshApplication(Object sender, EventArgs e)
        {
            MessageBox.Show("Bingo");
        }

但是在

委托 d = Delegate.CreateDelegate(tDelegate,typeof(ChartHelper.ICChartHelper), miHandler);

行,我遇到错误Error binding to target method

我也找到了here 的讨论,并试图解决同样的问题,但没有运气。

我需要帮助来了解我做错了什么?

谢谢

【问题讨论】:

    标签: reflection c#-3.0 delegates


    【解决方案1】:

    您的方法是一个实例方法,因此您需要使用CreateDelegate 的重载,它接受委托的目标,并传入声明类型的实例。例如:

    Delegate d = Delegate.CreateDelegate(tDelegate, new ICChartHelper(), miHandler);
    

    请注意,您无需在 EventInfo 上调用 GetAddMethod 并使用反射调用它 - 您只需使用 EventInfo.AddEventHandler

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2017-11-24
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多