C# 如何获取注册的事件处理函数的名称

JoeBlackzqq 2017-03-30 11:05:58
C# 控制台程序,一个类A, 里面申明了一个public event Load,

Load被多个事件处理函数注册,如aa.OnLoad, bb.OnLoad,cc.OnLoad

我如何在调用Load的时候获取到“aa.OnLoad, bb.OnLoad,cc.OnLoad” 这几个注册的事件处理函数的名称呢?因为我要确定到底是在哪个接口处理函数出现了异常,来定位问题!

非常感谢!
...全文
497 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjb759523159 2017-04-02
  • 打赏
  • 举报
回复
ex.TargetSite
Mooyi_水 2017-03-31
  • 打赏
  • 举报
回复
直接用TryCath 里面是有行号的和方法名的,不用考虑的太复杂
JoeBlackzqq 2017-03-30
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
用Delegate的GetInvocationList方法可以获取到委托链表 https://msdn.microsoft.com/en-us/library/system.delegate.getinvocationlist(v=vs.110).aspx
谢谢,你这方法我用了,但是如何在我抛出事件时,获得各个正在执行的处理函数的名称呢,好让我定位出问题的地方!
JoeBlackzqq 2017-03-30
  • 打赏
  • 举报
回复
能不能在我抛出事件时,打印每个正在执行的事件处理函数的名称呢,好像并不能,因为抛出事件才一句话,具体运行有多个,如何能获取到各个事件处理函数的名称 呢??
JoeBlackzqq 2017-03-30
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
[quote=引用 2 楼 wddw1986 的回复:] 异常信息里面就有堆栈信息,为什么要自己获取哪里出的异常?
看静态信息,不如动手在断点进行调试,直接查看堆栈上各个调用点的内存状态。不动手调试而只看静态文本信息,显然开发调试效率是差了很多,是不得已(只能看日志)才用的办法。[/quote] 又不是非发现bug,而且不是我的模块的,所以我也不知道到底在哪里出错。我声明事件,其他人注册,在我抛出事件并运行他们的事件处理函数时,不知道哪里出错了,而且不是在我本地跑,我本地的帐号测试都是OK的,就某些号有此问题, 帐号信息不方便迁移到我本地服! 没有找到确切原因时,不方便说是某某人的问题!所以就成了我要查找的问题
  • 打赏
  • 举报
回复
引用 2 楼 wddw1986 的回复:
异常信息里面就有堆栈信息,为什么要自己获取哪里出的异常?
看静态信息,不如动手在断点进行调试,直接查看堆栈上各个调用点的内存状态。不动手调试而只看静态文本信息,显然开发调试效率是差了很多,是不得已(只能看日志)才用的办法。
  • 打赏
  • 举报
回复
引用 楼主 JoeBlackzqq 的回复:
我如何在调用Load的时候获取到“aa.OnLoad, bb.OnLoad,cc.OnLoad” 这几个注册的事件处理函数的名称呢?因为我要确定到底是在哪个接口处理函数出现了异常,来定位问题!
你不在开发环境进行白盒测试吗?测试出错时vs调试器直接定位到出错的语句上了,你就可以开始调试了,所以这是可以直接调试的。难道你是写了一堆 try...catch从而丧失了vs调适能力?
cheng2005 2017-03-30
  • 打赏
  • 举报
回复
异常信息里面就有堆栈信息,为什么要自己获取哪里出的异常?
xdashewan 2017-03-30
  • 打赏
  • 举报
回复
用Delegate的GetInvocationList方法可以获取到委托链表 https://msdn.microsoft.com/en-us/library/system.delegate.getinvocationlist(v=vs.110).aspx
Saleayas 2017-03-30
  • 打赏
  • 举报
回复
使用 VS 来调试,可以直接定位到异常所在的 .dll 文件,然后,你就可以通知对方了。 或者,你修改 add 方法,只加载其中的一个。 我更加估计是你没有测试好你的 event .
xdashewan 2017-03-30
  • 打赏
  • 举报
回复
引用 7 楼 JoeBlackzqq 的回复:
谢谢,你这方法我用了,但是如何在我抛出事件时,获得各个正在执行的处理函数的名称呢,好让我定位出问题的地方!
你在使用GetInvocationList后可以写代码一个一个触发其中的事件处理函数,并取得返回值,而不用一般的方式触发事件
Poopaye 2017-03-30
  • 打赏
  • 举报
回复
引用 楼主 JoeBlackzqq 的回复:
我如何在调用Load的时候获取到“aa.OnLoad, bb.OnLoad,cc.OnLoad” 这几个注册的事件处理函数的名称呢? 因为我要确定到底是在哪个接口处理函数出现了异常,来定位问题!
而且这两句,究竟是要获取到所有注册的方法?还是要定位问题? 不相干的需求
Poopaye 2017-03-30
  • 打赏
  • 举报
回复
引用 楼主 JoeBlackzqq 的回复:
因为我要确定到底是在哪个接口处理函数出现了异常
异常见过吗?
xuggzu 2017-03-30
  • 打赏
  • 举报
回复
我记得try……catch……里面貌似有函数,行号,类名等信息。

110,534

社区成员

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

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

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