在线求教难点:从配置文件中取出多个方法名及程序集路径,将配置文件中的一组方法挂接到程序的某个事件上。即根据配置文件中的设置动态的绑定到程序的指定的事件上
在线求教难题:从配置文件中取出多个方法名及程序集路径,将配置文件中的一组方法挂接到程序的某个事件上。即根据配置文件中的设置动态的绑定到程序的指定的事件上
在主程序中有一个事件
Main()
{
Class c=new Class();
//一般的事件绑定是这样的,这里使用了匿名方法,现在希望这个事件绑定的多方法是从配置文件里取的(配置文件中的方法签名与事件委托的签名是相同的)
c.TestEvent+=delegate(object sender,EventArgs e)
{
//do something
}
c.TestEvent+=delegate(object sender,EventArgs e)
{
//do something2
}
}
大致用到的内容是反射、委托、事件,肯请指点下
------解决方案--------------------
参考下面动态绑定事件的代码,测试成功。其中使用方法名称和程序集命名空间等字符串来进行反射。LZ可以自行将字符串放入配置文件。
在主程序中有一个事件
Main()
{
Class c=new Class();
//一般的事件绑定是这样的,这里使用了匿名方法,现在希望这个事件绑定的多方法是从配置文件里取的(配置文件中的方法签名与事件委托的签名是相同的)
c.TestEvent+=delegate(object sender,EventArgs e)
{
//do something
}
c.TestEvent+=delegate(object sender,EventArgs e)
{
//do something2
}
}
大致用到的内容是反射、委托、事件,肯请指点下
------解决方案--------------------
参考下面动态绑定事件的代码,测试成功。其中使用方法名称和程序集命名空间等字符串来进行反射。LZ可以自行将字符串放入配置文件。
- C# code
using System; using System.Windows.Forms; using System.Reflection; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string NameSpacePath = "WindowsFormsApplication2"; //要绑定的方法所在命名空间 string ClassPath = "WindowsFormsApplication2.Form1"; //要绑定的方法所属的类 string MethodName="button1_Click"; //要绑定的方法名 MethodInfo mi = Assembly.Load(NameSpacePath).CreateInstance(ClassPath).GetType().GetMethod(MethodName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); EventHandler ev = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), this,mi); button1.Click += ev; } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("通过反射加载事件成功!"); } } }