2011-12-12 38 views
0

這裏是在Visual Studio 2008中一些簡單的C#示例代碼:Visual Studio'查找所有引用'失敗的事件處理程序?

public partial class Form1 : Form 
{ 
    private static System.Timers.Timer TestTimer; 
    public Form1() 
    { 
     InitializeComponent(); 

     TestTimer = new System.Timers.Timer(); 
     TestTimer.Elapsed += DoSomething;    
    } 

    private void DoSomething(Object source, EventArgs e) 
    { 

    } 
} 

如果我右鍵單擊指定爲處理程序DoSomething,並選擇Go to definition,VS發現的DoSomething身體。到現在爲止還挺好。

如果我右鍵點擊它並且Find all references它什麼也沒找到。 (!?)

如果我爲DoSomething本身的主體執行這些操作中的任何一個,它只發現它本身,而不是作爲事件處理程序的分配。

我錯過了一些明顯的東西嗎?一個設置也許?在所有其他情況下,當您詢問all references包括定義和其他所有參考。我意識到這項任務是根據代表思考的,但這似乎不一致。很容易找到什麼時候被指定爲處理程序。

+0

你重建你的解決方案/項目嗎? –

回答

0

您的事件處理程序聲明不完全符合鼻菸。 ElapsedEventHandler委託具有不同的簽名。修復:

void DoSomething(object sender, System.Timers.ElapsedEventArgs e) { 
     // etc.. 
    } 

智能感知現在將能夠找到所有的引用。不希望使用智能感知來正確分配事件。鍵入+=後,按兩次Tab鍵讓它自動生成代碼。

+0

這不是我從頭開始寫的代碼,但是我已經繼承並維護着。它按照預期進行編譯和運行,只是IntelliSense沒有。顯然,即使編譯器不支持IntelliSense也需要完整的簽名?我想是合理的。謝謝! – mickeyf

相關問題