Предположим следующий сценарий: в реализации MVVM есть окно WPF.Имея следующий код в своем коде за файлом (на самом деле я знаю, что лучше использовать первый подход ViewModel, но на этом этапе достаточно использовать View First):
public MainWindow()
{
InitializeComponent();
this.DataContext = MainWindowViewModel.GetInstance();
}
в конструкторе
ClassStartingWorkerThread instance;
MainWindowViewModel()
{
instance = new ClassStartingWorkerThread();
}
Я инициализирую экземпляр класса, который запускает Thread по конструкции, как показано ниже:
ClassStartingWorkerThread()
{
StartThread();
}
private Thread mEventRequestingThread = null;
private void StartThread()
{
ThreadStart cDelegate = new ThreadStart(EventListening);
mEventRequestingThread = new Thread(cDelegate);
mEventRequestingThread.Start();
}
Этот класс реализует интерфейс IDisposable.Поэтому я вызываю мой метод Dispose вручную для Destruction так:
~ClassStartingWorkerThread()
{
Dispose(false);
}
public void Dispose()
{
mEventRequestingThread.Abort();
}
По крайней мере, вы должны знать: я запускаю свое приложение из Visual Studio.Теперь я закрываю окно UI и ожидаю, что моя рутина уничтожит созданные объекты.Но Visual Studio не возвращается в режим «редактирования» и остается в режиме «отладки».
Я думаю, что-то не так с моей подпрограммой потока, но мне интересно, почему ни деструктор MainWindow, ниВызывается деструктор MainWindowViewModel.
Это приводит к вопросу о том, как я могу вручную запустить процедуру уничтожения и сказать моему рабочему потоку, который на самом деле блокирует это, остановиться?
Заранее спасибоТомас