Multiserver (TCP)

    • VB.NET

    Es gibt 854 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

      OK, dann mach ich das so...
      Verhält sich das bei der InputBox genauso wie bei der MessageBox, sodass der Code danach einfach noch nicht ausgeführt wird?
      Dann könnte ich ja einfach direkt unter den InputBox-Code nen If not nick = Nothing etc-Code setzen.
      Wenn ich das Fenster mit Abbrechen schließe, sollte das doch eig. neu geöffnet werden?
      Eben.
      Verhält sich das bei der InputBox genauso wie bei der MessageBox, sodass der Code danach einfach noch nicht ausgeführt wird?
      Ja.

      Ich persönlich würde allerdings bei einem fertigen Programm generell nicht mehr mit Inputboxes arbeiten.
      1. Veraltet
      2. Fehler abfangen nicht so leicht
      3. Nicht so schön anpassbar

      das wären meine drei Gründe ;)

      Edit: mach für das Formular nen eigenes Show, welches MyBase ShowDialog abruft, somit wartet es und du kannst beliebige Werte an deine Funktion zurückgeben
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Da macht die IDE nicht mit.

      function "show" führt Shadowing für einen überladbaren Member durch, der in Basis class "Form" deklariert ist. Wenn Sie die Basismethode überladen möchten, muss die Methode als "Overloads" deklariert werden.
      So, hab das hinbekommen.
      Jetzt hab ich Probleme mit dem Server-Teil: Ich möchte zur Laufzeit Infos in ne ListBox packen, wenn sich ein Client verbindet.

      Aber da ich das aus nem anderen als dem GUI-Thread heraus versuche, schlagen alle Versuche natürlich fehl.
      Kann mir jemand sagen, wie ich diese Sub aus nem anderen Thread heraus aufrufen kann?

      VB.NET-Quellcode

      1. Public Sub report(ByVal msg As String)
      2. messages.Items.Add(Date.Now.ToLongTimeString & " " & msg)
      3. End Sub


      Edit: Ich habe jetzt das:

      VB.NET-Quellcode

      1. Private Delegate Sub ReportProgress(ByVal msg As String)
      2. Private Sub report(ByVal msg As String)
      3. If MainServer.InvokeRequired Then
      4. MainServer.BeginInvoke(New ReportProgress(AddressOf report), New Object() {msg})
      5. Return
      6. End If
      7. MainServer.messages.Items.Add(Date.Now.ToLongTimeString & " " & msg)
      8. End Sub
      9. report("| STATUS | Server wurde gestartet.")


      Das alles wird aus der tcpserver.vb aus gemacht, die den Servercode beinhaltet, die Form, mit der man den Server startet, heißt MainServer, die ListBox mit den hinzuzufügenden Items heißt messages.
      Wenn ich den Code nun ausführe, geschieht einfach gar nichts. Keine Fehlermeldung, nichts.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Samus Aran“ ()

      verwende MainServer.Invoke(das Return benötigst du dann auch nicht mehr...)evtl. sollte das Delegate auch im Formular deklariert sein...
      [VB.NET] Threading.Thread benutzerdefinierte Events auslösen
      das hilft dir evtl. auch weiter, ist schöner, als für alles nen Invoke zu machen, mit diesem hier kannst du es mit Events alles in ner Klasse machen ;)
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Mit MainServer.Invoke, ohne Return und mit Public Delegate... im MainServer tut sich immer noch nichts...
      Und den Code im verlinkten Thema verstehe ich nicht, es hagelt nur unverständliche Fehler.

      Edit: Ich glaub, ich gebs auf :pinch:
      Das ganze Crossthreading-Gedöns funktioniert hinten und vorne nicht, Google hilft mir kein bisschen weiter, und ne andere Methode habe ich nicht gefunden...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Samus Aran“ ()

      Danke für das Angebot, aber ich hatte heute selber keine Zeit :(

      Ich hab das Problem jetzt (relativ sauber) lösen können, indem ich nen FileSystemWatcher genommen hab, und statt nem direkten Eintrag in die ListBox einfach in eine Textdatei geschrieben hab (vom Serverthread aus), die gleichzeitig der Log ist (It's not a bug, it's a feature :p).
      Der Watcher greift sich dann immer die jeweils letzte Zeile aus der Datei und schreibt die in die ListBox (nämlich vom Hauptthread aus :thumbsup: ).