2014-09-05 126 views
0

ProcessModule.Events - 从MSDN:http://msdn.microsoft.com/en-us/library/system.diagnostics.processmodule_properties%28v=vs.110%29.aspx如何访问ProcessModule.Events属性?

这里是我的代码:

System.Diagnostics.Process[] procs = 
      System.Diagnostics.Process.GetProcessesByName(TARGET_BASE); 
if (procs.Length > 0) 
{ 
    foreach (System.Diagnostics.Process p in procs) 
    { 
     System.Diagnostics.ProcessModule pm = p.MainModule; 
     System.ComponentModel.EventHandlerList ehl = pm.Events; 
    } 
} 

编译器抱怨ehl = pm.Events,即:

'System.ComponentModel.Component.Events' 是由于无法访问到其保护级别

请注意,我没有得到访问ProcessModule的其他属性的错误。编译器抱怨由于其保护级别,getEvent的访问器无法访问。

+0

ProcessModule继承* Component的Events *是一个相当离奇的.NET 1.0怪癖。它绝对不会*做你希望它做的事,在另一个过程中没有办法得到事件。编译错误当然是为了防止你犯这个错误。 – 2014-09-05 01:00:32

+0

这就解释了为什么Intellisense拒绝向我展示Events属性:-)。汉斯,你应该只是将你的回答作为答案......答案是“无论MSDN说什么,你都无法这样做”。 – 2014-09-05 01:06:16

+0

我喜欢像大多数SO用户那样的快乐答案。 – 2014-09-05 01:26:33

回答

1

MSDN明确指出此属性为protected。这意味着只有从对象类型派生的类可以访问它的属性。

这与.NET中的大多数事件实现一致。公共用户通常仅限于添加和删除处理程序,而无法查看,替换或清除整个处理程序列表。尽管事实上这是一个财产,而不是一个真实的事件,但它似乎是遵循有限访问的相同方法。