Ich arbeite an einer Ampelsimulation und gerade versuche ich, die Ampeln die Farbe zu wechseln (sowohl Auto- als auch Fußgängerampel). Das Problem ist, dass ich 8 Ampeln pro Kreuzung und 12 Kreuzungen habe. Ich habe versucht mit einem Timer und einem Zähler, aber das Problem ist, dass das Intervall nicht eingehalten wird:Ampelsimulation: Farbe der Ampel ändern
Wenn die Startfarbe rot ist, ist die rote Zeit 8 und die grüne Zeit ist 10 dann, wenn die Farbe grün wird In zwei Sekunden wird es wieder rot angezeigt. Hier ist der Timer-Code:
private void timerTrafficLights_Tick(object sender, EventArgs e)
{
counter++;
foreach(TrafficLight t in trafficLights)
{
if(counter%t.RedTime==0 &&t.TrafficColor==TrafficLightColor.RED)
{
t.SwitchLight(t, TrafficLightColor.GREEN, t.ID);
}
else if(counter % t.GreenTime==0 && t.TrafficColor==TrafficLightColor.GREEN)
{
t.SwitchLight(t, TrafficLightColor.RED, t.ID);
}
}
foreach(PedestrianLight p in pedestrianLights)
{
if(counter % p.RedTime==0 && p.LightColor == PedestrianLightColor.RED)
{
p.SwitchLight(p, p.ID, PedestrianLightColor.GREEN);
}
else if (counter % p.GreenTime ==0 && p.LightColor == PedestrianLightColor.GREEN)
{
p.SwitchLight(p, p.ID, PedestrianLightColor.RED);
}
}
UI.InvalidateEvent.InvalidatePanel();
}
private void TimerTrafficLights()
{
timerTrafficLights.Interval = 1000;
timerTrafficLights.Tick += new EventHandler(timerTrafficLights_Tick);
timerTrafficLights.Start();
}
Der Timer wird gestartet, wenn die Simulation gestartet und der Wert des Zählers zu Beginn der Simulation ist 0.
Halten Sie zwei Zähler für rotes und grünes Licht – Steve
Das würde Arbeit, wenn ich nur eine Ampel hätte oder wenn alle die gleiche grüne oder rote Zeit haben ... was sie nicht tun. – MonicaS
Dispatcher läuft auf einem Timer. https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer(v=vs.110).aspx Vielleicht oben die Priorität und es schneller ausführen. WPF ist nicht das richtige Werkzeug für eine visuelle Simulation wie diese. – Paparazzi