2015-05-30 2 views
0

У меня есть этот код:Вызов метода из другого метода

 public void StartTimer() 
     { 
      var timer = new DispatcherTimer(); 
      timer.Tick += Something; 
      timer.Interval = new TimeSpan(0, 0, 0, 3); 
      timer.Start(); 

     } 

     private async void Something() 
     {  
     //code goes here.... 
     } 

Проблема заключается в том, что я получаю эту ошибку:

No overload for 'Something' matches delegate 'System.EventHandler'

Мой вопрос, вероятно, основной: почему я получаю эту ошибку и как могу ли я исправить это ...

+1

timr.Tick нужен метод чья подпись соответствует EventHandler, то есть «пустое что-то (объект отправителя, EventArgs е)» –

+0

Даже когда я изменить его на: частный асинхронной недействительным Somerhing (отправитель объекта, RoutedEventArgs e) Я получаю ту же ошибку – Tal

+1

@Tal это 'EventArgs', а не' RoutedEventArgs'. – dcastro

ответ

0

Подпись Something не соответствует этому конкретному событию. Просмотрите документацию для этого события, чтобы узнать, как это делается.

1

DispatcherTimer.Tick событие ожидает обработчик, который принимает object и EventArgs аргумент:

private void Something(object o, EventArgs e) 
{ 
    // implementation 
} 
3

Tick Свойство имеет тип EventHandler.

Подпись EventHandler является:

public delegate void EventHandler(
    Object sender, 
    EventArgs e 
) 

Это означает, что ваш метод Something должен соответствовать этой подписи. Измените его на:

public void Something(Object sender, EventArgs e) { ... } 

В качестве альтернативы, если вы не можете изменить подпись этого метода, вы можете создать новый делегат, который вызывает ваш метод.

timer.Tick += (s, e) => Something(); 
+0

Спасибо, но когда я меняю его на: private async void Somerhing (отправитель объекта, EventArgs e) Я вижу ту же ошибку – Tal

+0

Да, это не работает ... – Tal

+0

Альтернатива внизу работала! Но знаете ли вы, почему первое предложение не работает? – Tal

0

Постарайся Это

 public void StartTimer() 
     { 
      var timer = new DispatcherTimer(); 
      timer.Tick += Something; 
      timer.Interval = new TimeSpan(0, 0, 0, 3); 
      timer.Start(); 

     } 

     private async void Something(Object sender, EventArgs e) 
     {  
     //code goes here.... 
     } 
Смежные вопросы