[C#] Timer-Index?

RealMarkus

Grünschnabel
Hallo,

für meine Anwendung, welche eine Serveranwendung ist auf die user connecten brauche ich auch timer, und zwar einen timer den jeder user >für sich< bekommt, bei visual basic kann man ja so viele timer erstellen wie man will wenn man einfach Timername(index) schreibt.

Da jeder User seine eigene ID hat, dachte ich mir es so zu machen: Wenn der user online geht bekommt er den TimerUpdate mit seiner ID als index.

Nun vorweg: Ist es überhaupt möglich so etwas zu machen, also 1 timername X Timer?
 
Hallo

Ich habe hier ein Beispiel aber leider nicht in C#.
Eventuell kannst Du das nach C# umstellen.
Code:
Public Class Form1
    Private TimerArray(9) As Timer ' Control-Array 0-9

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' 10 Timer neu erzeugen
        For i As Integer = 0 To 9
            ' Neuen Timer erzeugen
            TimerArray(i) = New Timer

            ' Den Timer verwenden:
            With TimerArray(i)
                ' Auf das Tick-Ereignis reagieren können:
                AddHandler .Tick, AddressOf TimerArray_Tick
            End With
        Next i
    End Sub

    Private Sub TimerArray_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
        ' Tick-Ereignis des Timer-Arrays auswerten
        Dim itemTick As Timer = CType(sender, Timer)
        Dim index As Integer = -1I

        ' Das betroffene Element im Array suchen 
        For i As Integer = LBound(TimerArray) To UBound(TimerArray)
            If TimerArray(i) Is itemTick Then
                index = i
                Exit For
            End If
        Next

        If index > -1 Then ' Element im Array gefunden (sonst index = -1)
            ' Kurze Informations-MessageBox für das Codebeispiel
            MessageBox.Show("Sie haben den Timer Nr. " & CStr(index) & " aktiviert", _
                            "Index des Timers ermitteln", _
                            MessageBoxButtons.OK, _
                            MessageBoxIcon.Information)
        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' TimerArray(0) zum Testen starten
        TimerArray(0).Interval = 2000
        TimerArray(0).Start()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' TimerArray(0) stoppen
        TimerArray(0).Stop()
    End Sub
End Class
 
Hi

Pack die Timer doch in eine Generic-Dictionary (Dictionary<>, System.Collections.Generic). Als Key nutzt du die ID des Users und als Value den Timer. Anhand der ID kannst du dann ganz einfach auf die einzelnen Timer zugreifen.
 
@niggo
könntest du mir mal ein beispiel posten? ansonsten danke schonmal!
Allerdings glaube ich du meinst man kann mit einem key auf vorgefertigte timer zugreifen, ich meine es aber eher in diese richtung:
Wenn der user online geht wird ein Timer mit dem index seiner SOCKET-ID erstellt also z.B. Timer UserUpdate[ + SocketID + ] = new Timer

@Norbert
Erstmal muss jeder user einen eigenen haben, denn er soll (wenn aktiviert) jede sekunde ein userspezifisches packet versenden was von user zu user anderst aussieht. Dieser updater soll bei allen möglichst gleichzeitig ablaufen deswegen möchte ich, dass jeder einen eigenen hat und nicht nur einen der alle user durcharbeitet.

Noch eine frage wäre ob das bei c.a. 200 connecteten usern überhaupt performabel wäre, falls nicht, hat jemand ne bessere lösung als jedem einen timer zuzuweisen?
 
Zuletzt bearbeitet:
Zurück