Ich bin gerade dabei, ein Tray-Icon für CraftBukkit zu programmieren.
Also wird Java mit Parametern als neuer Prozess mit folgendem Code gestartet:
Spoiler anzeigen
Ich möchte gerne alle X Sekunden ein Balloon-Tip (über das System.Windows.Forms.NotifyIcon "TrayIcon") mit den letzten Ausgaben des Servers anzeigen. Mein aktueller Lösungsansatz sieht wiefolgt aus:
Spoiler anzeigen
Das Problem: Wenn alles eingelesen wurde, ist rln immer noch nicht Nothing , sondern er wartet, bis eine neue Zeile eingegeben wurde.
Mit ReadToEnd() und Read() dasselbe Problem.
Wie kann man es hinbekommen, dass er nicht auf eine Eingabe wartet, sondern einfach weiter macht? Eingeben kann man ja nichts, weil kein Fenster angezeigt wird, und außer einem unschönen Extrathread der dann eine leere Zeile ans Programm sendet fällt mir auch nichts ein.
Das geht wohl mit irgendwelchen Asynchronen Events, aber das verstehe ich nicht so richtig und das Beispiel auf MSDN ist ziemlich unübersichtlich.
Edit by der_Kurt:
Die Farbe Rot ist nur für die Moderation zulässig --> Boardregeln
* Beitrag wurde editiert *
Also wird Java mit Parametern als neuer Prozess mit folgendem Code gestartet:
VB.NET-Quellcode
- Private WithEvents Server As Process
- [...]
- Server = New Process
- Server.StartInfo.WorkingDirectory = "[...]\Bukkit\"
- Server.StartInfo.FileName = "[...]\java.exe"
- Server.StartInfo.Arguments = "-jar ""[...]\Bukkit\craftbukkit.jar"""
- Server.StartInfo.RedirectStandardError = True
- Server.StartInfo.UseShellExecute = False
- Server.StartInfo.CreateNoWindow = True
- Server.Start()
Ich möchte gerne alle X Sekunden ein Balloon-Tip (über das System.Windows.Forms.NotifyIcon "TrayIcon") mit den letzten Ausgaben des Servers anzeigen. Mein aktueller Lösungsansatz sieht wiefolgt aus:
VB.NET-Quellcode
- Dim t As New Threading.Thread(Sub() Thrd())
- [...]
- t.Start()
- [...]
- Private Sub Thrd()
- While 1
- System.Threading.Thread.Sleep(2000)
- Dim rln As String = Server.StandardError.ReadLine()
- Dim rl As String = rln
- rln = Server.StandardError.ReadLine()
- While Not rln = Nothing
- rl = rl & vbCrLf & rln
- rln = Server.StandardError.ReadLine()
- End While
- TrayIcon.ShowBalloonTip(1000, "Serverstatus", rl, ToolTipIcon.Info)
- End While
- End Sub
Das Problem: Wenn alles eingelesen wurde, ist rln immer noch nicht Nothing , sondern er wartet, bis eine neue Zeile eingegeben wurde.
Mit ReadToEnd() und Read() dasselbe Problem.
Wie kann man es hinbekommen, dass er nicht auf eine Eingabe wartet, sondern einfach weiter macht? Eingeben kann man ja nichts, weil kein Fenster angezeigt wird, und außer einem unschönen Extrathread der dann eine leere Zeile ans Programm sendet fällt mir auch nichts ein.
Das geht wohl mit irgendwelchen Asynchronen Events, aber das verstehe ich nicht so richtig und das Beispiel auf MSDN ist ziemlich unübersichtlich.
Edit by der_Kurt:
Die Farbe Rot ist nur für die Moderation zulässig --> Boardregeln
* Beitrag wurde editiert *
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()