2012-05-19 56 views
3

如何在程序打開後10秒後運行一個函數。C#中的計時器在打開程序後觸發X秒?

這是我試過的,我無法使它工作。

private void button1_Click(object sender, EventArgs e) 
{ 
    Timer tm = new Timer(); 
    tm.Enabled = true; 
    tm.Interval = 60000; 
    tm.Tick+=new EventHandler(tm_Tick); 
} 
private void tm_Tick(object sender, EventArgs e) 
{ 
    Form2 frm = new Form2(); 
    frm.Show(); 
    this.Hide(); 
} 

回答

13

你有幾個問題:

  1. 您需要使用Load事件,而不是一個按鈕單擊處理程序。
  2. 您應該將間隔設置爲10000,等待10秒鐘。
  3. 您正在使用本地變量作爲計時器實例。這使您很難在以後的日期參考計時器。使計時器實例成爲表單類的成員。
  4. 記住你運行窗體後停止計時,或者,它會嘗試每隔10秒

換句話說,像這樣打開:

private Timer tm; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    tm = new Timer(); 
    tm.Interval = 10 * 1000; // 10 seconds 
    tm.Tick += new EventHandler(tm_Tick); 
    tm.Start(); 
} 

private void tm_Tick(object sender, EventArgs e) 
{ 
    tm.Stop(); // so that we only fire the timer message once 

    Form2 frm = new Form2(); 
    frm.Show(); 
    this.Hide(); 
} 
+0

檢查我的編輯,代碼需要'tm.Start()' – balexandre

+0

@balexandre感謝您的編輯。它可以通過'Start()'或者'Enabled'設置爲'true'來啓動。我認爲我們的編輯正在越來越多。 –

0

是將有利於你的程序是這樣的嗎?

namespace Timer10Sec 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Thread t = new Thread(new ThreadStart(After10Sec)); 
      t.Start(); 
     } 

     public static void After10Sec() 
     { 
      Thread.Sleep(10000); 
      while (true) 
      { 
       Console.WriteLine("qwerty"); 
      } 
     } 
    } 
} 
+0

你回答一個問題? – balexandre

+0

是的。 johniek_comp可以將函數放入線程,並在睡眠10秒後啓動函數的邏輯。 – Smit

+1

我不會在這種情況下使用Thread.Sleep(),因爲它會睡眠至少10秒。你肯定不會知道什麼時候會再次激活。 – basti