2012-04-01 205 views
0

我有一個基於richtextbox作爲控制檯文本的服務器應用程序。問題是,我有啓動,重新啓動和停止按鈕 - 但我的重啓按鈕不起作用。等待完成,然後再執行下一個任務

我的繼承人爲重啓按鈕的代碼:

consoletxt("RESTART", "Restarting Server..."); 
statuslabel1.Text = "Restarting"; 
statuslabel1.ForeColor = Color.Orange; 
statuslabel2.Text = "Restarting"; 
statuslabel2.ForeColor = Color.Orange; 

command("stop"); 

//The performclick just starts the server 
startbtn.PerformClick(); 

statuslabel1.Text = "Online"; 
statuslabel1.ForeColor = Color.DarkGreen; 
statuslabel2.Text = "Online"; 
statuslabel2.ForeColor = Color.DarkGreen; 
consoletxt("RESTART", "Restart completed, server online!"); 

但是,輸出是這樣的:

2012-04-01 11:32:12 [RESTART] Restarting Server... 
2012-04-01 11:32:12 [RESTART] Restart completed, server online! 
2012-04-01 11:32:12 [INFO] CONSOLE: Stopping the server.. 
2012-04-01 11:32:12 [INFO] Stopping server 

所以,它說,重新啓動已在文本完成 - 但它不是招」 t - 它所做的一切就是停止服務器。

CODE FOR PERFORMCLICK:

try { var x = ServerProc.StartTime; return; } 
      catch { } 
      try 
      { 
       ServerProc.Start(); 
       ServerProc.BeginErrorReadLine(); 
       statuslabel1.Text = "Online"; 
       statuslabel1.ForeColor = Color.DarkGreen; 
       statuslabel2.Text = "Online"; 
       statuslabel2.ForeColor = Color.DarkGreen; 

      } 

可以請sombody向我解釋如何正確地做到這一點?

謝謝!

+1

好吧,它聽起來像是'PerformClick'的代碼,這在這裏很重要,而且你還沒有顯示出... – 2012-04-01 11:26:21

+0

我現在把這個代碼放在... – 2012-04-01 11:28:02

回答

1

好了,好了:

首先你應該永遠剛剛捕獲異常,什麼也不做。如果服務器還沒有啓動,大概你會預料到一種異常 - 所以趕上特定的異常,最好記錄在某個地方。或者,如果在全部可能,創建一些更合適的API來檢測它是否已經啓動。

其次,假設ServerProcProcess,你已經開始了這個過程本身 - 但這並不意味着服務器正在「啓動並運行並準備好服務」。這聽起來像您可能想要進行某種輪詢,以便您可以知道服務器何時實際上正在運行(或未正常啓動)。不知道你的服務器是做什麼的,很難知道它應該是什麼樣子。當它準備好時,你可能會寫入它的標準輸出/錯誤,或者你可以對它做出一些無害的請求,直到確實響應 - 大概是超時,這樣如果啓動超過幾秒鐘,你可以放棄。

編輯:這聽起來像你可能想要將最後一段代碼說「在線」(這似乎是在兩個地方......)到一個單獨的方法。當你的「行處理」代碼發現「我已經開始」的消息時,它應該,然後報告服務器已啓動。您可能還需要設置一個計時器,以便在幾分鐘內啓動服務器而不是時,您可以中止該過程或任何適當的操作。

+0

更具體地說,它是一個Minecraft服務器包裝器 - 是的,ServerProc是一個進程。 – 2012-04-01 11:38:15

+0

@AlexOgden:對,因爲我對Minecraft一無所知......你怎麼能知道它什麼時候「起來」? *是否將任何內容寫入其標準輸出/錯誤流?是否有一些有用的無操作請求可供您使用? – 2012-04-01 11:51:36

+0

在控制檯中輸出 - 12:56:39 [INFO]完成(1.836s)!如需幫助,請輸入「help」或「?」 – 2012-04-01 11:56:55

相關問題