Vb.net 让winforms应用程序等待几分钟后再继续
我已经看过一些关于堆栈溢出的参考资料,它们是关于使用Vb.net 让winforms应用程序等待几分钟后再继续,vb.net,winforms,Vb.net,Winforms,我已经看过一些关于堆栈溢出的参考资料,它们是关于使用Timer类来做我想做的事情的,但是我不相信这是解决这个问题的正确方法 基本上,我有一个按钮(在.NET 4.0中),当单击该按钮时,它将执行一些不同的子例程并执行某些操作: 重新启动一些服务 启动自动完成的命令行应用程序 启动自动完成的第二个命令行应用程序 启动自动完成的第三个命令行应用程序 我现在遇到的问题是,程序只是遍历每件事情并尽快启动它——这不是问题,只是第三个命令行应用程序必须在前三个完成后启动 我在代码中有一个sleep调用,
Timer
类来做我想做的事情的,但是我不相信这是解决这个问题的正确方法
基本上,我有一个按钮(在.NET 4.0中),当单击该按钮时,它将执行一些不同的子例程并执行某些操作:
- 重新启动一些服务
- 启动自动完成的命令行应用程序
- 启动自动完成的第二个命令行应用程序
- 启动自动完成的第三个命令行应用程序
sleep
调用,除了它冻结了UI,并且我在这个应用程序上有一个状态栏,我想对其进行更新,以让用户知道正在发生的事情
我在考虑一个定时器
对象,但我不确定这是否会导致在做下一件事之前暂停
我正在使用一个
进程.Start
方法来启动命令行应用程序,因此它实际上不会引发事件。我应该让我的子例程引发一个事件,然后让第三个进程启动方法等待该事件触发后再启动吗?这个小片段可能会对您有所帮助。试着获得想法并实现自己的代码
try
{
Process myProcess;
myProcess = Process.Start("Notepad.exe");
while (true)
{
if (!myProcess.HasExited)
{
// Discard cached information about the process.
myProcess.Refresh();
// Print working set to console.
Console.WriteLine("Physical Memory Usage: "
+ myProcess.WorkingSet.ToString());
// Wait 2 seconds.
Thread.Sleep(2000);
}
else {
break;
}
}
// Close process by sending a close message to its main window.
myProcess.CloseMainWindow();
// Free resources associated with process.
myProcess.Close();
}
catch(Exception e)
{
Console.WriteLine("The following exception was raised: ");
Console.WriteLine(e.Message);
}
wait Task.Delay(x)
应该提到我正在努力坚持.NET framework 4.0。看起来只有4.5.InstallMicrosoft.Bcl.Async
来自NuGetNever call Task.Delay或Thread.Sleep的GUI应用程序。流程类有一个已退出的事件。你可以用它做下一件事。