2014-09-05 91 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中的大多數事件實現一致。公共用戶通常僅限於添加和刪除處理程序,而無法查看,替換或清除整個處理程序列表。儘管事實上這是一個財產,而不是一個真實的事件,但它似乎是遵循有限訪問的相同方法。