2012-09-26 26 views
4

我有一个c#wpf应用程序,在main()方法中,我检查某个条件,如果它是真的,我运行一个不同的进程,但是,我需要在某个超时后启动进程。因此,例如:在C#中的特定时间间隔后启动一个进程?

override OnStartUp() 

    { 
      if(condition == true) 
      { 
       ProcessStartInfo p = new ProcessStartInfo("filePath"); 
       p.Start(); // This should wait for like say 5 seconds and then start. 
        return; // This will exit the current program. 
      } 
    } 

我可以使用Thread.Sleep(),但也会导致当前的程序睡眠。换句话说,我希望当前的程序立即终止,然后在5秒后启动新的进程。

谢谢!

这可能吗?

+1

使用'Timer'到X一段时间后 – Servy

+1

执行一些动作@Servy:在当前进程已经终止后,这不会导致行动。 –

+0

是的..当前进程必须终止,并且只有在新进程需要等待5秒才能启动之后...谢谢 – user1202434

回答

3

你有几种选择:

  1. 修改正在启动的过程中,把延迟出现。你甚至可以等待“父母已经结束”而不是固定的时间。
  2. Windows内置的计划任务
  3. 使用睡眠命令,然后批处理文件运行程序
+0

不幸的是,我不认为一个计划任务将取决于此。 5秒钟等待太久; IIRC任务调度程序具有一分钟的粒度。 – cHao

+0

@cHao:我不知道实际的精度,但API接受秒的粒度:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383967(v=vs.85) .aspx –

+0

嘿Ben ....你的意思是“父母已经结束了”是否有一件事我可以挂钩? – user1202434

4

如果第一个进程创建第三个节目是什么。第一个程序会立即退出,而第三个程序会简单地休眠5秒钟,然后开始第二个程序。

+0

这是一个聪明的做法...但是编写3个独立的程序并不是真正的选择。谢谢你。 – user1202434

+0

我得到的印象是,第一个程序退出的时间和第二个程序开始的时间必须有一定的时间间隔。如果第二个程序可以立即开始并等待您需要的时间,那么Ben Voigt的答案中的选项1就是要走的路。在具有自动更新功能的程序中,这是一种常见的情况。更新程序必须由程序本身启动,但更新程序无法在主程序退出之前开始覆盖主程序。 – Exulted

0

您需要创建一个新的主题。在这个线程中你可以使用Thread.Sleep而不会阻塞你的程序。

public class MyThread 
{ 
    public static void DoIt() 
    { 
     Thread.Sleep(100); 
     // DO what you need here 
    } 
} 
override OnStartUp() 
{ 
    if(condition == true) 
    { 
     ThreadStart myThread = new MyThread(wt.DoIt); 
     Thread myThread = new Thread(myThread); 
     myThread.Start(); 
    } 
} 
+0

它确实阻止退出过程,这是问题中列出的要求。 –

1

您可以使用任务计划程序API,并设置一个时间的任务,将未来5 seconds.Nice后启动的应用程序管理wrraper:taskscheduler.codeplex.com

相关问题