Ich versuche, einen Integer-Wert in einen ElapsedEventHandler zu übergeben, damit ich Logik basierend auf dem übergebenen Integer machen kann. Wenn das Event ausgelöst wird, ist der Wert jedoch nicht der Wert I initialisiert es zu. Ich verstehe vielleicht nicht vollständig, wie der Delegierte arbeitet.Wie man ein Argument in ElapsedEventHandler übergibt
class Example
{
Dictionary<int, Timer> timer;
public Example()
{
timer = new Dictionary<int, timer>();
for(int i = 0; i < 12; ++i)
{
timer.Add(i, new Timer(5000));
timer[i].Elapsed += delegate { TimerTickCustom(i); };
}
}
public void Process() // called each cycle
{
for(int i = 0; i < 12; ++i)
{
timer[i].Start();
}
}
private void TimerTickCustom(int i)
{
// The value of i coming in does not match the dictionary key.
}
}
Versuchen Sie, ein neues Objekt zu erstellen, das 'Timer' erweitert und dort ein Feld erstellt! – Ilan321
Würde ich den Delegierten zu diesem Zeitpunkt noch verwenden? – user2970916
@ Ilan321 Sie erstellen nicht jedes Mal einen neuen Timer, wenn Sie Daten im 'tick'-Handler verwenden möchten. Das macht keinen konzeptionellen Sinn (es ist keine andere Art von Timer), es ist viel mehr Arbeit, und es ist einfach unnötig. – Servy