Никакая перегрузка для 'метода' не соответствует делегату 'System.EventHandler' - PullRequest
6 голосов
/ 09 ноября 2011

Я пытаюсь создать программу, которая после нажатия кнопки каждые 5 секунд будет выполнять функцию (OnTimed).

Ниже приведен код:

private void bntCapture_Click(object sender, RoutedEventArgs e)
{ 
    DispatcherTimer t1 = new DispatcherTimer();
    t1.Interval = TimeSpan.FromMilliseconds(5000);
    t1.IsEnabled = true;
    t1.Tick += new EventHandler(OnTimed);
    t1.Start();
}

void OnTimed(object sender, ElapsedEventArgs e)
{

    imgCapture.Source = imgVideo.Source;
    System.Threading.Thread.Sleep(1000);
    Helper.SaveImageCapture((BitmapSource)imgCapture.Source);
} 

Когда я запускаю код, он показывает ошибку:

«Нет перегрузки для метода» соответствует делегату «System.EventHandler»

Ответы [ 6 ]

12 голосов
/ 09 ноября 2011

Подпись метода-обработчика событий несовместима с типом делегата.

Подписчики на событие DispatcherTimer.Tick должны иметь EventHandler тип делегата, который объявлен как:

public delegate void EventHandler(object sender, EventArgs e);

Попробуйте вместо этого:

void OnTimed(object sender, EventArgs e)
{
   ...
}
2 голосов
/ 17 февраля 2015

Если вы используете Windows Phone 8.1, вам нужно следующее

private void OnTimed(object sender, object e) {
      // You Code Here
 }
1 голос
/ 09 ноября 2011

Метод OnTimed должен быть объявлен так:

 private void OnTimed(object sender, EventArgs e)
 {
     // Do something
 }
0 голосов
/ 11 октября 2017

В моем случае я использовал пользовательский элемент управления winforms для распознавания отпечатков пальцев digitalPersona.

Когда я пытался перегрузить метод OnComplete, он получал «No overload ...»

private void FingerprintVerificationControl_OnComplete(object control, DPFP.FeatureSet featureSet, DPFP.Gui.EventHandlerStatus eventHandlerStatus)

Вот как это выглядело.

Я посмотрел на сборку и заметил, что к третьему параметру прикреплено ключевое слово 'ref'.Я добавил его в свой код, и он работал:

private void FingerprintVerificationControl_OnComplete(object control, DPFP.FeatureSet featureSet, ref DPFP.Gui.EventHandlerStatus eventHandlerStatus)
0 голосов
/ 25 апреля 2017

Я знаю, что это может быть немного поздно, но я просто хотел бы добавить немного больше для тех, кто с этой проблемой:

timer.Tick += new EventHandler(Method);

public void Method(object sender, EventArgs e)
{
//Do Something
}

решает проблему.

Это также можно записать так: timer.Tick + = Method;

timer.Tick += Method;

public void Method(object sender, EventArgs e)
{
//Do Something
}

Надеюсь, это поможет!

0 голосов
/ 09 ноября 2011

Диспетчер. Отметьте просто EventHandler:

публичное событие EventHandler Tick;

Таким образом, параметры EventHandler должны быть:

void OnTimed(object sender, EventArgs e)

Не

void OnTimed(object sender, ElapsedEventArgs e)

Похоже, вы немного упустили из виду событие System.Timers.Timer.Elapsed что:

public event ElapsedEventHandler Elapsed

public delegate void ElapsedEventHandler(
    Object sender,
    ElapsedEventArgs e
)
...