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

Я пытаюсь настроить таймер, и по какой-то причине я продолжаю получать ошибки, когда пытаюсь рекурсивно вызвать ProcessStateChangedQueue(). Первоначально я пытался использовать Timer вместо DispacherTimer, но это приложение WPF. Я мог бы сделать timer.elapsed, если бы использовал таймер, но не могу в этом случае. Кажется, мне нужно использовать timer.tick. Я никогда не использовал это раньше. Вы можете видеть, где timer.elapsed закомментирован, мне просто нужно исправить это, чтобы я мог рекурсивно вызывать ProcessStateChangedQueue(), как показано ниже. Единственная ошибка No overload for "ProcessStateChangedQueue" matches delegate "System.EventHandler" Может быть, мне не следует использовать EventHandler. Я просто не уверен... есть идеи?

#region ********** STATE **********

public delegate void MapStateChangedHandler(object sender, MapStateEventArgs e);
public event MapStateChangedHandler MapStateChanged;
private Queue<String> stateChangedQueue = new Queue<String>();
private bool processingStateChanged = false;

private void RaiseMapStateChanged(string property)
{
    if (!CanSaveState) return;
    RebuildState();
    if (MapStateChanged != null)
    {
        //MapStateChanged(this, new MapStateEventArgs(property, State));
        stateChangedQueue.Enqueue(property);
        if (!processingStateChanged)
        {
            ProcessStateChangedQueue();
        }
    }
}

private void ProcessStateChangedQueue()
{
    if (stateChangedQueue.Count != 0)
    {
        processingStateChanged = true;
        MapStateChanged(this, new MapStateEventArgs(stateChangedQueue.Dequeue(), State));
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromMilliseconds(500);
        //timer.Elapsed = timer.Elapsed + new ElapsedEventHandler(ProcessStateChangedQueue);
        timer.Tick += new EventHandler(ProcessStateChangedQueue);
        timer.Start();
    }
    else
    {
        processingStateChanged = false;
    }
}

private void RebuildState()
{
    State.IsMonochrome = Monochrome;
    State.SelectedMapIndex = MapTileLayers.IndexOf(SelectedBaseMap);
    Dictionary<int, double> overlays = new Dictionary<int, double>();
    foreach (MapOverlay overlay in MapOverlays)
    {
        if (overlay.IsVisible)
            overlays.Add(MapOverlays.IndexOf(overlay), overlay.Opacity);
    }
    State.MapOverlays = overlays;
    State.ContrastValue = Contrast;
}

person developerME    schedule 24.03.2017    source источник
comment
В Stack Overflow есть множество вопросов, которые уже касаются этого типа ошибки. См., например. отмеченные дубликаты выше. Обратите внимание, что в вашем случае вы также можете адаптировать метод, используя анонимный метод: timer.Tick += (sender, e) => ProcessStateChangedQueue();   -  person Peter Duniho    schedule 25.03.2017
comment
Ни один из этих так называемых дубликатов не является той же проблемой, что и я. У них может быть одна и та же ошибка, но способ ее решения полностью отличается от того, что у них есть. А если нет, то я не знаю, что мне нужно делать. Почему никто не может помочь при переполнении стека. Я не понимаю. Спасибо. Похоже, мне придется делать репосты снова и снова, пока я не получу полезный ответ.   -  person developerME    schedule 25.03.2017
comment
способ ее решения полностью отличается от того, что у них есть -- нет. способ решения этой проблемы для вашего кода точно такой же, как и у них. Вы должны предоставить метод обработчика событий, который имеет точную сигнатуру, требуемую типом делегата. Независимо от того, есть ли у этого метода имя (как в отмеченных дубликатах) или он анонимный (как в предложении в моем комментарии), решение всегда одно и то же: предоставить подходящий метод вместо того, чтобы пытаться предоставить неподходящий.   -  person Peter Duniho    schedule 25.03.2017