2014-04-04 4 views
0

я эти коды, которые используют System.Timers.Timer по методу, который называется по Thread:Завершает ли System.Timers.Timer прерывание рабочего потока?

private void timeWorker() 
{ 
    var timer = new Timer(1000); 
    timer.Enabled = true; 
    timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 
} 
public MyConstructor() 
{ 
    var thread=new Thread(timeWorker); 
    thread.IsBackground = true; 
    thread.Start(); 
    // 
    thread.Abort(); 
} 

ли заканчивается на прерывании свою рабочую тему System.Timers.Timer?

+1

1) Таймер на самом деле не «принадлежит» к нити, которая их создала. Между ними нет никакой связи. и 2) Что бы вы ни делали, 'Thread.Abort' почти наверняка * не * правильный ответ. Но вы не сказали нам, что * проблема * вы пытались решить здесь. –

+0

@Damien_The_Unbeliever Моя проблема в том, что я хочу, чтобы, прервав поток, таймер больше не будет включен. –

+0

Но прерывание нити, само по себе, почти всегда ** неправильно **. Почему вы считаете, что наилучшим решением вашей проблемы является прерывание потока? –

ответ

0
  1. Вы не можете убить таймер, прервав нить.
  2. Timer имеет свой собственный поток, чтобы вызывать обработчик событий.
  3. Кроме того, поскольку @Damien_The_Unbeliever сказал, что таймер не принадлежит ни одному потоку, это системный объект.
  4. GC не будет собирать таймер из-за вашего обработчика событий.

Вы должны использовать try-catch в своей реализации метода потока, чтобы поймать ThreadAbortException и остановить таймер.

0

MSDN C# Threading

Я предлагаю эту ссылку для общей работы с потоками. Также упоминается, что Abort прервет Thread и предотвратит очистку использованных ресурсов.

Лучшим вариантом было бы метод вызвать, который отключает While-цикл внутри timeWorker класса как

public void RequestStop() 
{ 
    running = false; 
} 

в то время как работник выполняет свою работу в цикле

public void DoWork() 
{ 
    while(running) 
    { 
     ... 
    } 
//execution stopped 
} 

с переменная private volatile bool running.

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