Objekt löschen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von link_275.

    Objekt löschen

    Hi,



    wenn sich ein Client von meinem Server disconnected hat, so möchte ich, dass der Client gelöscht wird.
    dazu muss er aus einer Liste und wahrscheinlich aus dem RAM entfernt werden. Wie mache ich das ?


    Edit: der "Client" ist eine Klasse. Ich möchte quasi ein Objekt aus einer Klasse entfernen.


    Danke schonmal !
    TimBo
    Visual Basic FTW :D
    Programmiere u.a. mit C# (XNA), Blitz Basic 3D, BlitzPlus , PHP.
    Einfach die Referenz zu dem Objekt entfernen. Sobald keine Referenz mehr auf ein Objekt vorhanden ist wird dieses beim nächsten Durchlauf des GarbageCollectors aus dem Speicher entfernt. Falls du große Ressourcen zu bereinigen hast am besten noch das IDisposable-Interace implementieren in dessen Dispose()-Funktion du die Ressourcen freigibst. Sobald du das Objekt dann nicht mehr brauchst, rufst du die Dispose-Funktion auf.
    du wirst sicher ein Array oder eine Collection haben, bei der Collection die Remove Methode, beim Array kompliziert per ReDim...
    Außerdem musst du die Streams schließen(NetworkStream gehört auch dazu), und am Ende Dispose aufrufen, was nicht unbedingt nötig ist, da es Managed ist und das spätestens am Ende auch passiert ;)

    P.S.: Habs jetzt mal stehen lassen, der Stream ist auch wichtig...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Fehlermeldung

    Das Forum ist ja echt stark =) :thumbsup:


    VB.NET-Quellcode

    1. Public Shared Sub Update()
    2. Dim i = -1
    3. For Each v As Verbindungen In Verbindungen.List
    4. i = i + 1
    5. If v.Reader Is Nothing Then
    6. If v.client.Available = 1 Then
    7. v.Reader = New StreamReader(v.client.GetStream())
    8. v.Writer = New StreamWriter(v.client.GetStream())
    9. End If
    10. Else
    11. While (v.Reader.Peek > -1)
    12. Select Case v.Reader.Read
    13. Case 1
    14. 'Servername anfordern
    15. v.Writer.WriteLine(Form1.TextBox1.Text.ToString)
    16. v.Writer.Flush()
    17. Case 2
    18. 'Spieler umbenennen
    19. v.SpielerName = v.Reader.ReadLine()
    20. Debug.Print("in " & v.SpielerName & " umgenannt")
    21. End Select
    22. End While
    23. If v.Reader.EndOfStream = True Then
    24. Stop
    25. Verbindungen.List.RemoveAt(i)
    26. End If
    27. End If
    28. Next
    29. End Sub


    ich habe folgenden Code (siehe oben) und wenn ich die Referenz lösche, dann kommt immer:

    Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in mscorlib.dll aufgetreten.


    Ich nehme an, dass ich nachdem ich den Eintrag gelöscht habe, nochmal (vll mit goto) vor die for each springen muss. Kann das sein ?
    Visual Basic FTW :D
    Programmiere u.a. mit C# (XNA), Blitz Basic 3D, BlitzPlus , PHP.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TimBo93“ () aus folgendem Grund: Einrückungen verbessert


    For Each v As Verbindungen In Verbindungen.List

    Einfach die Schleife von hinten durchlaufen->

    VB.NET-Quellcode

    1. For x As Integer = Verbindungen.List.Count - 1 To 0
    2. Dim v As Verbindungen = Verbindungen.List(x)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    löschen pls

    Das wird nicht passieren. Aber klick hier einfach wenn du den Thread anschaust ganz unten rechts oder oben rechts auf den "Erledigt"-Button, dann weiß jeder dass das Problem gelöst wurde :)

    Hier klicken:


    Und andere sehen das dann entsprechend:




    link_275
    Hello World