У меня была такая же проблема, процесс приложения не останавливается, хотя приложение закрыто.
В моем случае я открыл окно из BackgroundWorker (код ниже)
BackgroundWorker BG = new BackgroundWorker();
BG.DoWork += new DoWorkEventHandler(BG_DoWork);
StockMinWindow MinWindow = new StockMinWindow(null); -------- this is the problem
BG.RunWorkerAsync();
создание экземпляра окна перед запуском BackgroundWorker, похоже, не является проблемой, но стирая строку, которую приложение закрыло корректно
Я открываю свое окно из BackgroundWorker, но использую основной поток (код ниже)
View.Dispatcher.BeginInvoke(new Action(delegate()
{
StockMinWindow MinWindow = new StockMinWindow(StockMinList);
MinWindow.Owner = View;
MinWindow.ShowDialog();
}));
Надеюсь, это поможет.