2013-08-16 38 views
0

簡而言之,我在早上開始運行我的C#程序,程序應該在下午5:45向用戶顯示一條消息。我怎樣才能在C#中做到這一點?C#如何在給定的時間運行代碼?

編輯:我問這個問題,因爲我想用一個定時器是不是最好的解決方案(週期性比較當前的時間,我需要運行任務的時間):

private void timerDoWork_Tick(object sender, EventArgs e) 
{ 
    if (DateTime.Now >= _timeToDoWork) 
    { 

     MessageBox.Show("Time to go home!"); 
     timerDoWork.Enabled = false; 

    } 
} 
+0

你應該提供你試圖解決這個問題的代碼示例。 – BartoszKP

+0

5:45 PM設置一個'Timer' –

+0

您誤解了'Timer'類,重新查看文檔可能是個好主意。 – flindeberg

回答

0

您可以使用定時器來檢查每分鐘,如果DateTime.Now ==(您想具體時間)

這是一個例子代碼與Windows窗體

public MainWindow() 
    { 
     InitializeComponent(); 
     System.Windows.Threading.DispatcherTimer timer_1 = new System.Windows.Threading.DispatcherTimer(); 
     timer_1.Interval = new TimeSpan(0, 1, 0); 
     timer_1.Tick += new EventHandler(timer_1_Tick); 
     Form1 alert = new Form1(); 
    } 
    List<Alarm> alarms = new List<Alarm>(); 

    public struct Alarm 
    { 
     public DateTime alarm_time; 
     public string message; 
    } 


    public void timer_1_Tick(object sender, EventArgs e) 
    { 
     foreach (Alarm i in alarms) if (DateTime.Now > i.alarm_time) { Form1.Show(); Form1.label1.Text = i.message; } 
    } 
+0

爲什麼要檢查每一分鐘?我們不能將計時器設置到所需的時間嗎? –

+0

我認爲用tick事件處理程序創建一個具有1分鐘(例如)間隔的計時器可以使程序檢查每分鐘的對應性。如果您想要設置多個「警報」,則會更容易。 – Hadron

+0

我不這麼認爲,請查看我的解決方案http://stackoverflow.com/a/18270238/2530848 –

0

你可以很容易地實現自己的報警類。首先,您可能需要在MS文章結尾處檢查Alarm class

5

我問這個問題,因爲我想用一個定時器不是最好的解決方案(週期性比較當前的時間,我需要運行任務的時間)

爲什麼?爲什麼不計時最好的解決方案? IMO定時器是最好的解決方案。但不是你實施的方式。嘗試以下操作。

private System.Threading.Timer timer; 
private void SetUpTimer(TimeSpan alertTime) 
{ 
    DateTime current = DateTime.Now; 
    TimeSpan timeToGo = alertTime - current.TimeOfDay; 
    if (timeToGo < TimeSpan.Zero) 
    { 
     return;//time already passed 
    } 
    this.timer = new System.Threading.Timer(x => 
    { 
     this.ShowMessageToUser(); 
    }, null, timeToGo, Timeout.InfiniteTimeSpan); 
} 

private void ShowMessageToUser() 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke(new MethodInvoker(this.ShowMessageToUser)); 
    } 
    else 
    { 
     MessageBox.Show("Your message"); 
    } 
} 

使用方法如下

SetUpTimer(new TimeSpan(17, 45, 00)); 
+0

在.NET 4+中使用:TimeSpan InfiniteTimeSpan = new TimeSpan(0,0,0,0,-1);而不是Timeout.InfiniteTimeSpan –