Benutzer mit den meisten Antworten
Programm bleibt komplett hängen, bei ErrorDataReceived Event

Frage
-
Hallöchen ich bins wieder ;)
ich habe ein Grosses Problem, und zwar habe ich einen neuen Prozess erstellt.
Diesen habe ich das ErrorDataReceived Event hinzugefügt. Wenn mein Prozess dann startet, und ich alle ErrorOutputs abfange, und es mal viele Errors hintereinander werden, dann bleibt aufeinmal mein Programm hängen, so dass ich in Visual Studio den Stop Button klicken darf.
Hier einmal der Code um es zu verdeutlichen:
public BukkitInstance() { Bukkit = new Process(); Bukkit.StartInfo = new ProcessStartInfo("java", "-Xmx1G -Xms1G -jar craftbukkit.jar -nojline"); Bukkit.StartInfo.WorkingDirectory = "Bukkit"; Bukkit.StartInfo.UseShellExecute = false; Bukkit.StartInfo.RedirectStandardInput = true; Bukkit.StartInfo.RedirectStandardOutput = true; Bukkit.StartInfo.RedirectStandardError = true; Bukkit.StartInfo.CreateNoWindow = true; Bukkit.ErrorDataReceived += new DataReceivedEventHandler(bukkit_ErrorDataReceived); SucessFullyLoadEvent += new SucessFullyLoad(onServerHasLoaded); CrashedOnLoadEvent += new CrashedOnLoad(onServerCrashedWhileLoading); } public void bukkit_ErrorDataReceived(object sender, DataReceivedEventArgs e) { try { FormMain.ConsoleTab.setConsole(e.Data + "\n"); _lastmessage = e.Data; if (e.Data.EndsWith("! For help, type \"help\" or \"?\"")) { SucessFullyLoadEvent.Invoke(sender, e); } else if (e.Data.EndsWith("Perhaps a server is already running on that port?")) { CrashedOnLoadEvent.Invoke(sender, e); } else if (e.Data.EndsWith("CONSOLE: Reload complete.")) { new Thread(reloadServer_Thread).Start(); } } catch (Exception) { } } public void startcraftbukkit() { Bukkit.Start(); Bukkit.BeginErrorReadLine(); FormMain.BaseTab.setServerStatus("Startet...", Color.Orange); FormMain.BaseTab.setButtonMode(TabBase.BUTTONMODE_StopRestart); FormMain.ConsoleTab.setConsole("", true); ProgLog.WriteLogEntry("start server!", false); isStartet = false; isrunning = true; FormMain.reloadthreadrunning = true; new Thread(FormMain.ThreadReloadStreamData).Start(); }
Das Auslesen an sich klappt alles wunderbar, der komplette Code funktioniert halt, jedoch würde ich es sehr gerne vermeiden, dass aufeinmal das ganze Programm hängen bleibt.
Undgefähr bei jedem 3-4. Start des Prozesses bleibt alles hängen. Kann man das irgendwie abfangen? oder verhindern?
LG
Antworten
-
Hi,welches Zeitverhalten haben Deine Invoke-Aufrufe? Ich würde dort ansetzen und diese auch in einen separaten thread auslagern.Wie häufig wird in Deiner Anwendung ein neuer thread gestartet? Ich würde nur einen zusätzlichen thread starten und diesen über eine Queue mit “Nahrung” versorgen.--
Peter Fleischer- Als Antwort markiert ThaCorp Samstag, 9. März 2013 18:08
Alle Antworten
-
Hi,welches Zeitverhalten haben Deine Invoke-Aufrufe? Ich würde dort ansetzen und diese auch in einen separaten thread auslagern.Wie häufig wird in Deiner Anwendung ein neuer thread gestartet? Ich würde nur einen zusätzlichen thread starten und diesen über eine Queue mit “Nahrung” versorgen.--
Peter Fleischer- Als Antwort markiert ThaCorp Samstag, 9. März 2013 18:08