Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 让winforms应用程序等待几分钟后再继续_Vb.net_Winforms - Fatal编程技术网

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.Install
Microsoft.Bcl.Async
来自NuGetNever call Task.Delay或Thread.Sleep的GUI应用程序。流程类有一个已退出的事件。你可以用它做下一件事。