2014-01-13 55 views
2

我已经在堆栈溢出中看到了一些关于使用Timer类来做我想做的事情的参考资料,但我不相信这是正确的解决方案。让Winforms应用程序等待几分钟后再继续

基本上,我有一个按钮(在.NET 4.0中),当点击会经过几个不同的子程序和做某些事情:

  • 重新启动一些服务
  • 启动命令行应用程序完成自动
  • 启动自动完成
  • 启动第三命令行应用程序,自动完成
第二命令行应用程序

我现在面临的问题是,程序只是通过每一件事情并尽快将其关闭 - 除了第三个命令行应用程序必须仅在前三个完成之后触发外,这不是问题。

我有一个sleep调用的代码,除了这冻结了用户界面,我有这个应用程序,我想更新,让用户知道事情正在发生的状态栏。

我正在考虑Timer对象,但我不确定那会在做下一件事情之前真正导致暂停。

我正在使用Process.Start方法来关闭命令行应用程序,因此它实际上并不引发事件。我应该只是让我的子程序提出一个事件,然后让第三个方法等待事件在它发生之前触发?

+0

'Await Task.Delay(x)' – SLaks

+0

应该提到我试图坚持.NET框架4.0。看起来这只是4.5。 –

+0

从NuGet安装'Microsoft.Bcl.Async' – SLaks

回答

0

这个小片段可能会帮助你。试着去理解并实现你自己的代码。

 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); 
    } 
相关问题