2011-01-27 5 views
2

사용자 입력을 요구하지 않고 잠시 후에 자동으로 닫히도록 작업 콘솔 앱 내에 타이머를 추가해야하는 임무가있었습니다. 내 응용 프로그램에는 일부 조건에 따라 데이터베이스의 특정 데이터를 삭제하고 사용자가 'exit'를 입력 할 때마다 종료하는 기능이 있습니다. 이제 응용 프로그램을 종료하도록 설정된 시간 (예 : 2 시간)이 주어지면 항목 삭제가 아직 완료되지 않은 경우에도 프로세스를 자동으로 중지해야합니다.지정된 시간 내에 콘솔 응용 프로그램을 닫는 방법?

나를 도와 줄 사람이 있습니까? 감사합니다. .

답변

-1

내가 키 = "Stoptime"에 대한 값이있는 app.config 파일을함으로써이 문제를 해결하는 데 도움이 바랍니다. 그런 다음 설정된 시간과 현재 시간을 비교하는 조건을 추가했습니다. 다음은 (동일한 문제가있는 사람들을위한) 해결책의 예입니다 :

public static void Main(string[] args) 
    { 
     string stoptime = ConfigurationManager.AppSettings["Stoptime"]; 
     DateTime timeEnd = Convert.ToDateTime(stoptime); 

     today = DateTime.Now; 
     Console.WriteLine(today); 

     for (int i = 0; i < 100000; i++) 
     { 
      id.Add(i.ToString()); 
     } 

     foreach(string item in id) 
     { 
      today = DateTime.Now; 

      if (timeEnd.CompareTo(today) >= 0) 
      { 
       Console.CursorLeft = 0; 
       Console.Write(item + " " + today); 
      } 
      else 
      { 
       Console.WriteLine(); 
       Console.WriteLine("break."); 
       break; 
      } 
     } 

     Console.ReadKey(); 
    } 
+0

아니요. 어쩌면 그 작동하지만 : 아니. – sabisabi

4

TimeSpan.FromHours(2) 간격으로 System.Timers.Timer을 만들고 Elapsed 처리기에 Environment.Exit()을 호출 할 수 있습니다.

2

데이터베이스에서 데이터를 조작하고 있기 때문에 프로그램을 죽이는 것이 좋은 생각이라고 생각하지 않지만 가장 간단한 방법이라고 생각합니다.

using Timer = System.Threading.Timer; 

class Program 
{ 
    private static readonly Timer _timer = 
     new Timer(o => Environment.Exit(0), null, 5000, Timeout.Infinite); 

    static void Main(string[] args) 
    { 
     Console.ReadLine(); 
    } 
} 
+0

우리는 또한 정해진 시간을 지정하는 경우이 경우 Timeout.infinite의 목적은 무엇입니까? 적기와 시간의 차이점은 무엇입니까? –

0

1) 타이머 이벤트에 푹 방법에서 트리거 할 때

단지 애플리케이션

종료 가능) 런 타이머 타이머 2) 간격 설정 경과 이벤트 핸들러 만들기 3
0

데이터베이스에서 데이터를 삭제하는 경우 갑자기 중지하면 치명적일 수 있습니다. 따라서 여러분은 이와 같은 것을 구현할 수 있습니다.

  • 는 다른 예에 설명 된대로 타이머를 구현 BackGroundWorker
  • 에서 작업을 소비하는 시간을 수행합니다.
  • 그런 다음 Tick/Interval 이벤트가 발생하면 BackgroundWorker에 작업 취소를 요청하십시오.
  • 작업 코드에서이 취소 요청을 수신하고 안전하게 삭제 프로세스를 중지하십시오 (삭제 또는 수행하지 않음)
  • 그런 다음 Environment.Exit()을 사용하여 프로그램을 종료하십시오 .

+0

감사합니다. Shekhar, 저는 이것을 구현할 것입니다. 그러나 삭제 부분은 쿼리를 사용하여 수동으로 수행되지 않습니다. 그것은 K2 라이브러리 (루프 내에서 수행된다는 점을 감안할 때 원자라고 가정)의 메소드에 의해 수행됩니다. 삭제할 프로세스를 결정했습니다. – janejanejane

관련 문제