Konsolenanwendung mit Windowsformsanwendung kombinieren [Tutorial]

    • VB.NET

    Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Trudi.

      Konsolenanwendung mit Windowsformsanwendung kombinieren [Tutorial]

      Hallo an alle,

      ich hatte kürzlich das Problem, dass ich eine Konsolenanwendung erstellt habe und in selbiger eine Windowsform benötigte.
      ich habe die Lösung gefunden und werde dafür jetzt ein kleines Tutorial machen. Ob diese optimal ist weiß ich nicht. für alle, die den alten Thread sehen wollen -> HIER.

      desweiteren möchte ich mich noch für die vermessenheit entschuldigen, die dazu geführt hat, dass mein alter thread geschlossen wurde.

      aber jetzt zum Tutorial:

      1. -> Man erstellet eine Konsolenanwendung.
      2. -> Man fügt eine Windows Form hinzu.
      3. -> Man klickt auf Projekt -> "DEIN PROJEKT" Eigenschaften...
      4. -> Dann trägt man unter "Startobjekt" Form1 ein (kann in eurem Fall auch anders heißen...)
      5. -> Damit Konsole und Form(en) unabhängig paralel arbeiten können ist Multithreading notwendig.
      Dazu schreiben wir folgenden Code in die Form, die die Hauptform werden soll (für weitere Fenster etc. ist das nicht mehr notwendig.)

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim Konsole As New Threading.Thread(AddressOf Module1.Main)
      3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      4. Konsole.Start()
      5. End Sub
      6. End Class


      Wenn ihr das Projekt jetzt startet, müsstet ihr ein normales Fenster haben, mit dem ihr wie gewohnt arbeiten könnt. und eine Konsole, die einfach "hängen bleibt" in dieser Konsole könnt ihr euch jetzt beispielsweise einen Log ausgeben lassen oder Schleifen mit Ausgabe abarbeiten, unabhängig von den Vorgängen in der/den Windowsforms.

      WICHTIG!: Beachtet, dass die "kommunikation" zwischen Fenster uns Konsole entwas gewöhnungsbedürftig ist.
      wenn jemand eine gute Lösung dafür findet, schreibe mir bitte eine PN. ich werde die Lösung dann diesem Tutorial hinzufügen.


      Ich hoffe, ihr könnt damit etwas anfangen. wenn ihr sonst noch weitere Ideen habt oder euch sonst irgendwelche sachen/eigenarten dieser Anwendungsart auffallen, dann teilt mit diese bitte mit, damit ich mein Tutorial erweitern und verbessern kann.


      MfG EsTari

      *Topic verschoben*

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

      Das geht dann aber nicht mit vorhandenen Projekten richtig ?
      Ich hab heute meiner Katze beim spielen
      zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
      überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
      Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
      angestarrt habe.
      wie meinst du das?

      also ein neues projekt ist vorraussetzung. da kannst du dann aber mit beiden arten arbeiten (konsole und form) aber von der konsole anweisungen an die form übergeben ist schwerer. ich hatte die konsle nur als Log.

      ob man die konsole in ein bestehendes projekt einbinden kann weiß ich nicht.
      Ja, ich meinte in vorhandene Projekte eine Konsolenanwendung einfügen.

      Mfg TBS
      Ich hab heute meiner Katze beim spielen
      zugesehen, sie ist die ganze Zeit einem Ball nachgejagt und ich hab mir
      überlegt, das Tier ist echt mit sehr einfachen Dingen zu begeistern...
      Dann ist mir aufgefallen, dass ich 10 Minuten nur meine Katze
      angestarrt habe.
      Da gibt es durchaus eine sehr viel elegantere Methode.

      Von Windows Forms Anwendung aus eine Konsole öffnen:
      AllocConsole benutzen und dann einfach Console.* benutzen.

      Hier der P/Invoke in VB:

      VB.NET-Quellcode

      1. <DllImport("kernel32.dll")> _
      2. Public Shared Sub AllocConsole()
      3. End Function


      Eine Konsole in einer Konsolenanwendung schließen:
      FreeConsole benutzen.
      AFAIK werden Pipes doch von der Shell/Kommandoprozessor bearbeitet und haben somit nichts mit der verwendeten Programmiersprache zutun. "|" leitet die Standardausgabe des ersten Prozesses auf die Standardeingabe des zweiten Prozesses um.

      lg SeriTools
      | Keine Fragen per PN oder Skype.
      bei mir gab es einige probleme wenn ich

      VB.NET-Quellcode

      1. Messagebox


      benutzt habe.

      das habe ich mit dem import von

      VB.NET-Quellcode

      1. Imports System.Windows.Forms

      gelöst.
      jetzt zeigt vb mir aber fehler bei color an zb

      VB.NET-Quellcode

      1. Label4.ForeColor = Color.Red

      er zeigt mir diesen fehler an : ""
      Fehler 1 "Color" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.


      weiß jemand was ich da machen kann um das zu ändern ?

      Greez
      Das ist einer der Hauptpunkte : Viele Namespaces sind nicht verlinkt bzw. importiert bei einer Konsolenanwendung und könnten Anfänger in die Irre führen.

      Entweder via Pipes (SeriTools, BeefyX)
      Oder Multithreading anwenden (progglord ?) indem du die Form in einem Thread für sich handeln lässt.
      Hi,
      Ich habe ne kurze Frage ob das auch andersrum gehen würde und wenn ja wie.
      Also ich habe eine Windows Form Anwendung gemacht und möchte im Hintergund eine Consolen Anwendung Laufen lassen.
      Ich habe schon ein Modul geschrieben und möchte sozusagen wenn ich auf ein Button drücke das sich eine Console öffnet und Modul1 bearbeitet wird.

      MFG Maze