我有一个运行后检查的安装。我要做的是调用函数
private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
}
else
{
StartApacheServer();
}
if(ApacheRunning() == false)
{
amountdl.Text = "Apache Is Starting";
}
else
{
amountdl.Text = "Apache Started";
}
}
我想要发生的是直到ApacheRunning() == true
我希望它继续运行这个功能。这在C#中是否可能?
答案 0 :(得分:1)
使用while
循环,但也可以使用其他一些更改。
private void ApacheTest() {
if (!File.Exists(HTTPD_PATH)) {
amountdl.Text = "Apache Not Found! Installation Corrupt!";
return;
}
amountdl.Text = "Apache Is Starting";
StartApacheServer();
while (ApacheRunning() == false) {
// spin
}
amountdl.Text = "Apache Started";
}
如果"找不到Apache"而不是继续(return
语句),则应该退出该函数。
说" Apache正在开始"尽快,不需要一遍又一遍地设置它。
答案 1 :(得分:1)
这可能有效,但它也可能会冻结您的UI(窗口)。
private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
}
else
{
StartApacheServer();
}
amountdl.Text = "Apache Is Starting";
while(ApacheRunning() == false)
{
Thread.Sleep(200);
}
amountdl.Text = "Apache Started";
}
如果发生这种情况,您可以尝试这样的事情:
private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
return;
}
amountdl.Text = "Apache Is Starting";
Task.Factory.StartNew(() =>
{
while(ApacheRunning() == false)
{
Thread.Sleep(200);
}
amountdl.Text = "Apache Started";
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); // nicked from [the MSDN forums][1]
}
这样,该函数将退出并“触发并忘记”等待和更新文本的任务。
答案 2 :(得分:0)
不要忘记if块内的return语句!
private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
return;
}
else
{
StartApacheServer();
}
amountdl.Text = "Apache Is Starting";
while(ApacheRunning() == false)
{
Thread.Sleep(50);
}
amountdl.Text = "Apache Started";
}
答案 3 :(得分:0)
如果您不希望锁定表单,则可以使用“async / await”功能和“Task.Delay”。
async private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
return;
}
amountdl.Text = "Apache Is Starting";
StartApacheServer();
while(ApacheRunning() == false)
{
await Task.Delay(50);
}
amountdl.Text = "Apache Started";
}
答案 4 :(得分:-1)
尝试:
private void ApacheTest()
{
if(!File.Exists(HTTPD_PATH))
{
amountdl.Text = "Apache Not Found! Installation Corrupt!";
}
else
{
StartApacheServer();
}
amountdl.Text = "Apache Is Starting";
while(ApacheRunning() == false)
{
Task.Delay(1000);
}
amountdl.Text = "Apache Started";
}
这里我使用Task.Delay(1000)
每秒检查一次服务器状态。