C#.NET:如何在按键上暂停和恢复程序执行?

时间:2010-07-15 03:55:24

标签: c# .net

它是一个.NET非GUI应用程序。它被指定为控制台应用程序,但实际上并未使用控制台。该应用程序的作用是对其他应用程序的GUI测试

3 个答案:

答案 0 :(得分:2)

其他人已经描述了如何开始/停止问题执行...对于实际的密钥捕获,我建议registering a global hotkey - 但是,您需要有一个Windows窗体句柄可供您使用,所以我还建议从GUI应用程序启动命令行实用程序,或者只是在GUI应用程序中包含该功能。

这种变化是否可能?

编辑:Christian Liensberger在他的博客上发表了excellent wrapper for this的内容。

答案 1 :(得分:1)

您必须让主线程始终在Console.Read()(或Console.ReadKey())等待,并在另一个线程上进行实际工作。当主线程检测到按键时,它需要以某种方式通知另一个线程暂停或恢复(例如,使用WaitHandle)。

如果工作线程正在做一些非常简单的事情,并且可以随时暂停它,那么你可以只是暂停/恢复线程而不是做任何通知。

答案 2 :(得分:1)

好的它应该是这样的......

//Assuming the thread name given is 'newthread'   
//First Start a thread     

newthread.Start();   

//use Console Key Class to read a key from keyboard    
ConsoleKeyInfo cki = new ConsoleKeyInfo();  
cki = Console.ReadKey(true);

//I am using letter 'p' to pause    
if (cki.Key == ConsoleKey.P)   
{  
  newthread.Suspend();  
  Console.WriteLine("Process Is Paused,Press 'Enter' to Continue...");  
}  

//Thread Resumption can only occur through another thread   
//If the thread control has passed on to the main function    
//resume it from there    


// Resuming Thread if paused   
if (newthread.ThreadState>0)    
{    
  ConsoleKeyInfo ckm = new ConsoleKeyInfo();   
  ckm = Console.ReadKey(true);    
  if (ckm.Key == ConsoleKey.Enter)    
   {    
     Console.WriteLine("Resuming Process...");    
     newthread.Resume();    
   }       
}  

注意:这应该可以正常工作,但实际上你应该同步你的线程。当你运行程序时,它会说暂停和恢复功能已经过时了。它会告诉你同步线程。