c # Обработчик событий без переопределения

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

Я подошел к этой проблеме и полдня смотрел на нее.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    logTimer = new System.Windows.Threading.DispatcherTimer();
    logTimer.Tick += new EventHandler(logTimer_Tick);
    logTimer.Interval = new TimeSpan(0, 0, 0, 1);
    logTimer.Start();

    txtLogData.Text = Logger.GetLines();

    try
    {
        DataProcessor gaugeProcessor = new DataProcessor(SQLConnectionString);
        gaugeProcessors.Add(gaugeProcessor);

        grdProcessor.ItemsSource = gaugeProcessors;

        List<GaugePort> ports = SQLClient.GetGaugePorts(SQLConnectionString);

        foreach(GaugePort port in ports)
        {
            GaugePortListener newListener = new GaugePortListener(port);
            listeners.Add(newListener);
        }

        grdPorts.ItemsSource = listeners;
    }
    catch(Exception ex)
    {

    }
}

Я получаю сообщение об ошибке в строке 4: «Нет перегрузки для 'logTimer_Tick' соответствует делегатам 'Обработчик событий'»

Функция, которую он называет дозой, существует и выглядит так

private void logTimer_Tick(object sender, EventArgs e)
{
     txtLogData.Text = Logger.GetLines();
}

Я просмотрел ссылки ниже, но нарисовал пустой http://www.yoda.arachsys.com/csharp/threads/parameters.shtml

Ожидается имя метода C #

Любые идеи были бы отличными

заранее спасибо

ИЗМЕНИТЬ

Измените формулировку сообщения об ошибке «Опечатка».


person Briggers123    schedule 21.04.2017    source источник
comment
Помогает ли просто поменять его на более новую форму logTimer.Tick += logTimer_Tick;?   -  person Sami Kuhmonen    schedule 21.04.2017
comment
Происходит что-то странное. Ваш обработчик событий соответствует делегату msdn.microsoft.com/en-us/library/   -  person Jamiec    schedule 21.04.2017
comment
Я только что протестировал этот код в LinqPad, и он отлично компилируется. Я не уверен, что происходит. Можете ли вы опубликовать MVCE?   -  person DaveShaw    schedule 21.04.2017
comment
@SamiKuhmonen Это исправило Спасибо за помощь и быстрый ответ   -  person Briggers123    schedule 21.04.2017
comment
Это странно ... Я не могу найти никаких доказательств, почему одного этого изменения было бы достаточно. Например, this и это, похоже, предполагает, что они будут давать одинаковые результаты и должны работать.   -  person musefan    schedule 21.04.2017
comment
Какую платформу вы используете? WPF, WinForms, Windows Phone, ...? И вы уверены, что ваше исключение связано с совпадениями делегатов вместо совпадений делегатов?   -  person MetaColon    schedule 21.04.2017


Ответы (1)


Непосредственно используйте метод:

logTimer.Tick += logTimer_Tick;

Это должно помочь, поскольку компилятор делает странные вещи с вашим обработчиком событий.

Странно то, что ваш код, кажется, работает на моей машине - это означает, что опубликованный вами код не совпадает с кодом, который вы пробовали, или это ошибка, вызванная вашим компилятором. Или, как третий вариант, logtimer не является таймером WinForms, тогда я не могу воспроизвести вашу проблему.

В этом третьем случае возможно, что второй параметр не является EventArg (хотя было бы странно, что он работает, если вы не используете материал EventHandler). Затем вы можете попробовать объект в качестве второго параметра:

private void logTimer_Tick (object sender, object e)

Кажется, это необходимо для Windows Phone 8.1 (Нет перегрузки для «метода» соответствует делегату System.EventHandler).

person MetaColon    schedule 21.04.2017
comment
Какие странные вещи он делает? Есть ли у вас ссылки? Мне интересно узнать об этом больше - person musefan; 21.04.2017