2010-06-29 4 views
0

как начать forms.timer внутри простой нити, у меня есть проблема , где мне нужно, чтобы запустить таймер внутри нити, как я могу это сделатьтаймер внутри нити

ответ

2

Лучшей альтернативой было бы использовать System.Timers.Timer класс, который не нужен цикл обработки сообщений и выглядеть как Windows, образует один или вы можете напрямую использовать System.Threading.Timer (Если вам нужно знать все различия между этими двумя классами есть a blog post with all the details):

using System; 
using System.Threading; 

class Program 
{ 
    static void Main() 
    { 
     using (new Timer(state => Console.WriteLine(state), "Hi!", 0, 5 * 1000)) 
     { 
      Thread.Sleep(60 * 1000); 
     } 
    } 
} 

Если вы действительно хотите, чтобы System.Windows.Forms.Timer работал, нужен цикл сообщений, вы uld запустите один в потоке, используя Application.Run либо the parameter-less one, либо the one taking an ApplicationContext для лучшего управления продолжительностью жизни.

using System; 
using System.Windows.Forms; 

class Program 
{ 
    static void Main() 
    { 
     var timer = new Timer(); 
     var startTime = DateTime.Now; 
     timer.Interval = 5000; 
     timer.Tick += (s, e) => 
     { 
      Console.WriteLine("Hi!"); 
      if (DateTime.Now - startTime > new TimeSpan(0, 1, 0)) 
      { 
       Application.Exit(); 
      } 
     }; 
     timer.Start(); 
     Application.Run(); 
    } 
} 
0

documentation говорит:

Этот таймер оптимизирован для использования в Windows Forms приложений и должны быть использованы в окне.

Используйте что-то вроде Thread.Sleep вместо этого.

Смежные вопросы