Mam obiekt zawierający wątek roboczy. Chciałbym zabić wątek, gdy obiekt jest poza zakresem.Jak niejawnie zatrzymać wątek w obiekcie w C#
using System.IO;
using System;
using System.Threading;
namespace tt {
class Program
{
static void Main()
{
AnotherClass a = new AnotherClass();
a.Say();
}
}
class AnotherClass:IDisposable {
private bool m_Disposed;
private readonly AutoResetEvent m_ResetEvent = new AutoResetEvent(false);
public AnotherClass() {
Thread t = new Thread(wait);
t.Start();
}
public void Dispose() {
Dispose(true);
}
private void Dispose(bool disposing) {
if (m_Disposed) {
return;
}
if (disposing) {
Console.WriteLine("inner disposing");
}
m_ResetEvent.Set();
Console.WriteLine("Outer disposing");
m_Disposed = true;
}
private void wait() {
m_ResetEvent.WaitOne();
}
~AnotherClass() {
Dispose(false);
}
public void Say() {
Console.WriteLine("HellO");
}
}
}
Program będzie tylko powiesić tam, ponieważ destruktor z AnotherClass nie nazywa. Wiem, że mogę wywołać a.Dispose(), aby zabić wątek. Ale czy istnieje sposób na nieumyślne zabicie wątku, gdy przedmiot wykracza poza zakres?
Myślę, że jedynym sposobem na niejawne zatrzymanie wątku jest odłączenie zasilania. –