Я пытаюсь настроить таймер, и по какой-то причине я продолжаю получать ошибки, когда пытаюсь рекурсивно вызвать 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;
}
timer.Tick += (sender, e) => ProcessStateChangedQueue();
- person Peter Duniho   schedule 25.03.2017