等待完成后再执行下一项任务

本文关键字:一项 任务 执行 等待 | 更新日期: 2023-09-27 18:29:36

我有一个服务器应用程序,基本上将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

所以,它在文本中说重启已经完成,但它还没有,它所做的只是停止服务器。

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;
            }

请森博迪向我解释一下如何正确地做这件事好吗?

谢谢!

等待完成后再执行下一项任务

好吧:

首先,你应该永远不要只是捕捉一个异常,什么也不做。如果服务器还没有启动,那么您可能会期待一种肯定的异常——所以捕获特定于异常,最好将其记录在某个地方。或者,如果在所有都可能,请创建一些更合适的API来检测它是否已经启动。

其次,假设ServerProcProcess,您已经启动了进程本身,但这并不意味着服务器目前"已启动并运行,可以提供服务"。听起来你可能想进行某种轮询,这样你就可以判断服务器何时实际运行(或未能正确启动)。如果不知道你的服务器应该做什么,很难知道它应该是什么样子。你可以在它真正准备好时让它写入标准输出/错误,或者你可以向它发出一些无害的请求,直到它做出响应-可能会有一个超时,这样如果启动需要几秒钟以上的时间,你就可以中止。

编辑:听起来你可能想把最后一段写着"在线"的代码(似乎在两个地方…)移到一个单独的方法中。当您的"行处理"代码发现"我已经启动"消息时,它应该然后报告服务器已经启动。您可能还需要设置一个计时器,这样,如果服务器在几分钟内没有启动,您可以中止进程或其他适当的操作。