문제

특정 시간에 이벤트를 어떻게 생성 할 수 있습니까? 예를 들어, 오전 8시에 오전 8시 (또는 주어진 시간에 현재 시간을 알려주는 이벤트)를 알려주는 경고를 생성하고 싶다고 가정 해 봅시다.

도움이 되었습니까?

해결책

사용 System.threading.timer 수업:

var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));

그만큼 callback 대의원은 다음에 오전 8시와 그 후 24 시간마다 불러옵니다.

보다 이렇게 질문 다음 8:00 AM 발생을 계산하는 방법.

다른 팁

DTB의 답변에 대해 자세히 설명하는 것은 이것이 제가 구현 한 방법입니다.

  private void Form1_Load(object sender, EventArgs e)
    {
        System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);

        //first occurrence at
        var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);

        if (DateTime.Now < dt)
        {
            var timer = new System.Threading.Timer(callback, null, 
                                               //other occurrences every 24 hours
                            dt - DateTime.Now, TimeSpan.FromHours(24));
        }

    }

    private void ProcessTimerEvent(object obj)
    {
        MessageBox.Show("Hi Its Time");
    }

프로그램에서 경고를 생성해야합니까? 대체 접근법은 a를 사용하는 것입니다 예정된 작업 (Windows) 경고를 생성합니다. 기본 응용 프로그램의 데이터 파일에서 정보를 수집하는 작은 프로그램을 작성해야 할 수도 있습니다.

이 접근법을 사용하면 몇 가지 주요 이점이 있습니다.

  1. 기능을 지원하기 위해 코드를 작성할 필요가 없습니다. 운영 체제에 내장 된 것을 사용합니다. 예제는 Windows에 대한 것이지만 다른 OS는 동일한 기능을 가지고 있습니다. 자신의 코드에 개발 및 지원 노력에 집중할 수 있습니다.
  2. 작업이 시작되기 위해 기본 응용 프로그램을 실행할 필요는 없습니다.
private void Run_Timer()
    {
        DateTime tday = new DateTime();
        tday = DateTime.Today;
        TimeSpan Start_Time = new TimeSpan(8,15,0);
        DateTime Starter = tday + Start_Time;
        Start_Time = new TimeSpan(20, 15, 0);
        DateTime Ender = tday + Start_Time;
        for (int i = 0; i <= 23; i++)
        {
            Start_Time = new TimeSpan(i, 15, 0);
            tday += Start_Time;
            if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
            {
                Time_To_Look = tday;
                timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
                timer1.Start();
                MessageBox.Show(Time_To_Look.ToString());
                break;
            }
        }
    }

이 기능을 사용하여 타이머를 시간 동안 실행하거나 특정 시간에 실행하도록 변경할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top