【发布时间】:2010-12-28 04:08:35
【问题描述】:
在使用Delegate时,我可以使用Delegate.GetInvocationList()方法在运行时检索delegate的调用列表。
有没有办法访问与事件关联的订阅者列表?我从这个example (SO#1237001) 运行代码,即时窗口允许我将 SecondChange 事件转换为 System.MultiCastDelegate,然后调用 GetInvocationList 方法。
但是,在我的场景中,我正在使用 System.Windows.Forms.DataGridView,并且我想在运行时检查 CellClick 事件的调用列表。但是,当我在 CellClick 上尝试任何类型的演员时,我收到以下错误:
事件 'System.Windows.Forms.DataGridView.CellClick' 只能出现在左侧 += 或 -=
我可以看到这些事件的声明存在明显差异。在时钟示例中,事件声明如下:
public event Func<DateTime, bool> SecondChange;
在 DataGridView 中,事件声明如下:
[SRDescription("DataGridView_CellClickDescr"), SRCategory("CatMouse")]
public event DataGridViewCellEventHandler CellClick
{
add
{
base.Events.AddHandler(EVENT_DATAGRIDVIEWCELLCLICK, value);
}
remove
{
base.Events.RemoveHandler(EVENT_DATAGRIDVIEWCELLCLICK, value);
}
}
为什么可以在 Clock 示例中调用 GetInvocationList,而不能在 DataGridView 事件中调用?有什么方法可以让我从 GetInvocationList 返回的 DataGridView 事件中获取相同类型的信息?
【问题讨论】: