Visual Studio «найти все ссылки» не удается обработчики событий? - PullRequest
0 голосов
/ 13 декабря 2011

Вот простой пример кода C # в Visual Studio 2008:

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, это включает определение и все остальные ссылки.Я понимаю, что задание мыслит с точки зрения делегатов, но это кажется противоречивым.Было бы очень удобно легко найти, когда что-то было назначено в качестве обработчика.

1 Ответ

1 голос
/ 13 декабря 2011

Ваша декларация обработчика событий не совсем подходящая. У делегата ElapsedEventHandler другая подпись. Исправлено:

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

IntelliSense теперь сможет найти все ссылки. Поддержите использование IntelliSense, чтобы получить правильное назначение события. После ввода += дважды нажмите клавишу Tab, чтобы автоматически сгенерировать код.

...