c# 反射 带自定义参数的事件(100分求教)

iland9876543210 2010-03-22 04:57:07
自己做了一个DLL,里面定义了一个具有自定义参数的事件,该怎样反射该事件?

同一个事件,如果使用系统参数System.EventArgs,反射没有任何问题。


自定义事件参数如下:(主要是想通过事件参数获得额外信息)

public class MyEventArgs:EventArgs
{
public MyEventArgs(string s)
{
message=s;
}
private string message="";
private object obj=null;
public object MyObject
{
get{return obj;}
set{obj=value;}
}
}

在创建代理实例是发生错误,请各位高手给些建议。谢了!
...全文
506 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iland9876543210 2010-03-24
  • 打赏
  • 举报
回复
问题出在这句:Delegate d = Delegate.CreateDelegate(tDelegate, miHandler);

使用自定义参数主要是为了传递更多信息,是按照MSDN上的例子做的。当然,如果使用sender传递同时使用标准的事件参数没有任何问题,主要是想知道问题在哪里?

错误提示:
System.ArgumentException: Error binding to target method.

谢谢!
iland9876543210 2010-03-24
  • 打赏
  • 举报
回复
我的机器上网不方便,码字很麻烦的。



方法和下面类似,


namespace ConsoleApplication
{
class Program
{
public static void s_TestEvent(string msg)
{
Console.WriteLine(msg);
}

static void Main(string[] args)
{
Assembly ass = Assembly.Load("ConsoleApplication");

object structInstance = ass.CreateInstance("ConsoleApplication.PrivateField");

Type structType = structInstance.GetType();


EventInfo eventInfo = structType.GetEvent("TestEvent", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);

Type tDelegate = eventInfo.EventHandlerType;

MethodInfo miHandler = typeof(Program).GetMethod("s_TestEvent", BindingFlags.Public | BindingFlags.Static);



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

MethodInfo miAddHandler = eventInfo.GetAddMethod();

object[] addHandlerArgs = { d };

miAddHandler.Invoke(structInstance, addHandlerArgs);

FieldInfo _Field = structType.GetField("TestEvent", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);

if (_Field != null)
{
object _FieldValue = _Field.GetValue(structInstance);

if (_FieldValue != null && _FieldValue is Delegate)
{
Delegate _ObjectDelegate = _FieldValue as Delegate;

_ObjectDelegate.DynamicInvoke(new object[] {"Sandy" });
}
}
}
}
}

iland9876543210 2010-03-24
  • 打赏
  • 举报
回复
谢谢各位,问题找到了。

主要是本地委托事件的参数必须使用object,然后反射e的自定义属性,类型不能直接使用自定义事件参数类。

结贴!!!!
healer_kx 2010-03-22
  • 打赏
  • 举报
回复
你应该使用EventArgs,而不是自己派生一个,你无法知道系统在这个参数上会做什么事情。
以上是题外话。

至于反射不成功,你可以看看EventArgs的构造函数是什么形式的?
人家可是没有带有一个string的构造函数啊。
此外Namespace也可能是出问题的原因。
liangchencf 2010-03-22
  • 打赏
  • 举报
回复
异常是什么?给个大致的代码吧
liangchencf 2010-03-22
  • 打赏
  • 举报
回复
异常的错误是什么?
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧