Windows Form innerhalb einer Konsolenanwendung, hängt sich auf.

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Gutserino.

    Windows Form innerhalb einer Konsolenanwendung, hängt sich auf.

    Hallo,
    habe eine Konsolenanwendung die Befehle über Netzwerk geschickt bekommt in diesem Fall zb
    wird gesagt das eine Windows Form geöffnet werden soll, für ein Chat fenster.
    Jedoch habe ich das Problem das sie Form sich aufhängt und keinen Text annimmt der dort angezeigt werden soll.

    Deklariert ist das ganze so

    VB.NET-Quellcode

    1. Public dlg As New Form1

    Die Chat Form heisst auch Form1 in der Projekt Mappe.

    Hier der Code wo er den Befehl empfängt und das Fenster öffnet
    Spoiler anzeigen
    If tmp.Contains("openchatwindow") Then
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)
    Application.Run(dlg)
    Console.WriteLine("Opening chat Window")
    End If

    Auf der Form ist lediglich eine ListBox die Chat Nachrichten anzeigen soll.

    Die mit diesem Befehl angezeigt werden sollen dort
    Spoiler anzeigen
    If tmp.Contains("|sendmessage") Then
    Dim input As String = tmp.Replace("|sendmessage", "")
    dlg.ChatListBox.Items.AddRange(input.Split("|"c))
    Console.WriteLine(input)
    End If


    Danke im voraus:)
    Mfg
    @Gutserino Deine Form ist wohl nicht instanziiert.
    Es fehlt dann diese Zeile:

    VB.NET-Quellcode

    1. dlg = New Form1

    Und:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Gutserino Nicht die Seite, sondern zunächst die eine einzige Zeile Code in meinem Post:

    VB.NET-Quellcode

    1. If tmp.Contains("openchatwindow") Then
    2. Application.EnableVisualStyles()
    3. Application.SetCompatibleTextRenderingDefault(False)
    4. dlg = New Form1 ' das hier
    5. Application.Run(dlg)
    6. Console.WriteLine("Opening chat Window")
    7. End If
    Und eine ganz wichtige Frage:
    Soll dei Console während der Sichtbarkeit des Dialogs bedienbar sein?
    Soll die Console mit der Form und / oder umgekehrt kommunizieren?
    Schreib mal präzise auf, was wie ablaufen und passieren soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja die Console soll am Ende nicht sichtbar sein, lass das momentan aber noch damit ich alles dort gegen checken kann das die Befehle ankommen etc
    Und die Console soll mit der Form Kommunizieren.
    Sprich wenn der Befehl "|sendmessage" kommt dann soll er das ganze in die ListBox der Form schreiben hier mit

    Quellcode

    1. If tmp.Contains("|sendmessage") Then
    2. Dim input As String = tmp.Replace("|sendmessage", "")
    3. dlg.ChatListBox.Items.AddRange(input.Split("|"c))
    4. Console.WriteLine(input)
    5. End If
    @Gutserino Äußere Dich mal zur Instanziierung der Form.
    Der Rest ist etwas zu dünn, um sich eine genauere Vorstellung Deines Problems zu machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich will ja nicht reingrätschen, aber

    RodFromGermany schrieb:

    Äußere Dich mal zur Instanziierung der Form.
    ist m.E. doch schon in Post#1, Codeblock#1 geschehen und erledigt.
    ...
    Aber ich seh gerade, dass die Instanziierung erst später erfolgen darf. Ok.

    VB.NET-Quellcode

    1. Dim dlg As Form1 = Nothing
    2. Sub Main()
    3. If Console.ReadLine <> "1" Then Return
    4. Application.EnableVisualStyles()
    5. Application.SetCompatibleTextRenderingDefault(False)
    6. dlg = New Form1 ' das hier
    7. Application.Run(dlg)
    8. Console.WriteLine("Opening chat Window")
    9. If Console.ReadLine() = "2" Then
    10. dlg.ListBox1.Items.AddRange({1, 2, 3})
    11. End If
    12. End Sub
    Funktioniert nur bis Application.Run, da danach die komplette Fokussierung aufs Form übergeben wird, wie beim Dialogaufruf. Und erst wenn die Form abgesch(l)ossen wird, geht es bei der Console weiter. Es geht dem TE also darum, dass Console und Form parallel/zeitgleich laufen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    VaporiZed schrieb:

    geschehen und erledigt.
    Jou.
    Ist bei mir iwie durchgefallen.
    Die Fehlerbeschreibung von @Gutserino war allerdings auch etwas flau.
    Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Gutserino schrieb:

    die sollen schon beide parallel miteinander laufen können
    Kannst Du mal präzise beschreiben, was da passieren soll?
    Wozu wird die Console benötigt?
    Wozu wird die Form benötigt?
    Was reden die beiden miteinander?
    ====
    Wer soll Master sein: Form oder Console?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    *unnötiges Zitat entfernt*

    Die Consolenanwendung an sich ist ein Server der permanent auf Commands wartet die mein Client an ihn schickt.
    Und wenn ein bestimmt Command eingeht soll die Console eine Form öffnen welche quazy als Chatfenster dient und Einträge in die listbox hinzufügt die mit einem anderen Command dort eingetragen werden vom Server.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @Gutserino Unterlass das vollständige Zitieren von Posts über den Deinen :!:
    Dann lass die Console weg und mach alles über WinForm.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da der Server in der Konsole permanent in ner Schleife hängt und auf Input wartet, funktioniert das ganze nicht mehr wenn ich es in eine Form umwandel.
    Müsste da dann erstmal rauskriegen wie man das ganze wieder umbastelt dafür.