2012-03-06 36 views
1

如何在同一页中停止执行后如何获取计数?例如,现在这条线不断重复,直到我停下来。它显示我开始处理时剩余的计数。但是我需要在停止repeatin行后留下剩下的数字。如何停止执行并在同一个输出屏幕中得到结果?

有人请帮助我。

的计划是 -

namespace Time_Writer 
{ 
    class Program 
    { 
     static int count = 1; 
     static double seconds; 
     static int total = 10000; 
     private static System.Timers.Timer aTimer; 

     static void Main(string[] args) 
     { 
      ReadCountFromFile(); 

      aTimer = new System.Timers.Timer(); 
      aTimer.Elapsed +=new System.Timers.ElapsedEventHandler(aTimer_Elapsed); 
      aTimer.Interval = 5000; 
      aTimer.Enabled = true; 
      Console.WriteLine("Press Enter To Exit The Program\n"); 
      Console.ReadLine(); 
      AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 

     } 
     private static void ReadCountFromFile() 
     { 
      try 
      { 
       if (File.Exists(".\\mynumber.dat")) 
       { 
        using (var file = File.Open(".\\mynumber.dat", FileMode.Open)) 
        { 
         byte[] bytes = new byte[4]; 
         file.Read(bytes, 0, 4); 
         count = BitConverter.ToInt32(bytes, 0); 
         total = total - count; 
         Console.WriteLine("Total count left is = {0}", total); 
         Console.WriteLine("Limit = 10000"); 
         Console.WriteLine("Count = {0}", count); 
         Console.WriteLine("Count: {0} of 10000. {1} remaining", count, 10000 - count); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Problem reading file."); 
      } 
     } 
     static void CurrentDomain_ProcessExit(Object sender, EventArgs e) 
     { 
      using (var file = File.Open(".\\mynumber.dat", FileMode.OpenOrCreate)) 
      { 
       var buffer = BitConverter.GetBytes(count); 
       file.Write(buffer, 0, buffer.Length); 
      } 
     } 
     private static void aTimer_Elapsed(object source, ElapsedEventArgs e) 
     { 
      Console.WriteLine("Name is Yap {0}", e.SignalTime); 
      seconds += 5; 
      count += 1; 
      if (count>10000 || seconds == 86400) 
      { 
       aTimer.Enabled = false; 
       Console.WriteLine("\n\nTimer is off at {0}\n\n", e.SignalTime.TimeOfDay.ToString()); 

      } 
     } 
    } 
} 
+0

见弗雷德里克的答案在这里:http://stackoverflow.com/questions/1119841/net-console-application-exit-event - 与空“消息泵”在一个单独的线程上运行一个完整的示例程序,基本上他使用消息泵在控制台应用程序ProcesssExits之前捕获事件。有些注释表明您需要“一种正常退出应用程序”,因此您可以使用另一个函数替换CurrentDomain_ProcessExit,该函数在打印结果后调用CurrentDomain_ProcessExit。另请参阅EricLaw -MSFT-答案。 HTH – 2012-03-06 05:40:54

+0

有完整源代码的最终解决方案? – Kiquenet 2012-08-30 10:23:17

回答

0

修改的最后三行代码如下。应用程序应该是控制台应用程序。

static void Main(string[] args) 
     { 
      ReadCountFromFile(); 

      aTimer = new System.Timers.Timer(); 
      aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed); 
      aTimer.Interval = 5000; 
      aTimer.Enabled = true; 
      Console.WriteLine("Press Enter To Exit The Program\n"); 
//Modification starts from here 
      AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 
      Console.ReadLine(); 
//Modification ends from here 
     } 
相关问题