2014-01-29 5 views
0

Я создал класс потоков и начал эту тему.как начать поток за период времени

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace Thread_class 
{ 
    class Program 
    { 
     class SubThread 
     { 
      public void PrintValue() 
      { 
       for (int i = 0; i < 10; i++) 
       { 
        Console.WriteLine("Inside PrintValue() of SubThread Class " + i); 
        Thread.Sleep(5); 
       } 
      } 
     } 
     static void Main(string[] args) 
     { 
      SubThread subthread=new SubThread(); 
      Thread thread = new Thread(new ThreadStart(subthread.PrintValue)); 
      thread.Start(); 
      for (int i = 0; i < 10; i++) 
       { 
        Console.WriteLine("Inside Main Class " + i); 
        Thread.Sleep(1); 

       } 
      thread.Join(); 
     } 

    } 
} 

Как я могу выполнить вышеуказанный метод за каждый определенный период времени? Возможно ли использование резьбы. Метод таймера для установки периода времени для запуска потока?

ответ

0

Да, вы можете использовать Threading.Timer.

int timeToStart = 2000; 
int period = 1000; 

SubThread sub = new SubThread(); 
Timer timer = new Timer(o => sub.PrintValue(), null, timeToStart, period); 

Таймер будет ждать 1 секунду, а затем выполнять вашу задачу каждые 2 секунды.

Для этого вам не нужно создавать свои собственные потоки, при необходимости таймер будет порождать поток. Не забудьте позвонить по телефону Dispose, когда все будет готово.

0

Да, вы можете использовать System.Threading.Timer, также обратите внимание, что System.Threading.Timer каждый раз обращается к методу обратного вызова в потоке ThreadPool, поэтому вам даже не нужно создавать Thread, просто запустите таймер, и обратный вызов будет выполняться в разных нить.

Просто позвоните

Timer t = new Timer(TimerProc, null, startAfter, period); 

private void TimerProc(object state) 
{ 
    // This operation will run in the thread from threadpool 
} 
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace Thread_class 
{ 
    class Program 
    { 

    static void Main(string[] args) 
    { 
     SubThread subthread = new SubThread(); 
     Thread thread = new Thread(subthread.PrintValue); 
     thread.Start(); 
     for (int i = 0; i < 10; i++) 
     { 
      Console.WriteLine("Inside Main Class " + i); 
      Thread.Sleep(1); 

     } 
     thread.Join(); 
     Console.ReadKey(); 
    } 

} 
class SubThread 
{ 
    public void PrintValue() 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      Console.WriteLine("Inside PrintValue() of SubThread Class " + i); 
      Thread.Sleep(1); 
      } 
     } 
    } 
} 

Надеется, что это поможет.

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