Добрый день, пишется многопоточное приложение под с#. В приложении имется необходимость в потоке который бы через определенное время проверял некоторые уловия. Время жизни потока определенно пользователе, т.е. поток может выполняться как до конца программы так и завершаться во время ее работы.
Под эти эти цели был создан специальный класс который, который содержит в себе поток.
public class SSimpleThread
{
private ManualResetEvent Event;
private Thread MaitThreadTh;
private void maitThreadMethod()
{
Event.WaitOne();
}
public SSimpleThread()
{
MaitThreadTh=new Thread(maitThreadMethod);
Event=new ManualResetEvent(false);
MaitThreadTh.Start();
}
public void Dispose()
{
MaitThreadTh.Abort();
MaitThreadTh.Join();
GC.SuppressFinalize(this);
}
~SSimpleThread()
{
MaitThreadTh.Abort();
MaitThreadTh.Join();
}
как видо что класс простой, и поток метода ни чего не делает кроме как бесконечно ждет.
В примере программы создается объект данного класса, а по истечении программа завершается
static void Main(string[] args)
{
SSimpleThread SimpleThread=new SSimpleThread();
Thread.Sleep(1000);
//SimpleThread.Dispose();
}
Вот тут собственно и возникает блокировка метода Finalize. Программа не может завершиться вообще (в деструктор отладчик даже не заходит), но при использовании метода Dispose программа корректно завершается. В чем же дело и как корректно реализовать деструктор, у классов в которых есть рабочие потоки?