У меня есть приложение WPF, в котором есть служба WCF. Часть этой услуги - это возможность закрыть приложение от другого клиента (работает на том же компьютере). Я использую следующий код, чтобы закрыть его в службе WCF:Закрытие приложения WPF через WCF слишком длинное
MainWindow form = MainWindow.CurrentInstance;
form.MySynchronizationContext.Send(_ => form.CloseWindow(), null);
Мой MainWindow является установка с статической переменной CurrentInstance, так что я могу получить текущее окно, а затем я вызываю метод, который я добавил под названием CloseWindow через SynchronizationContext. Все это работает отлично, за исключением того, что требуется много времени, чтобы закрыть (около 10 секунд), что намного больше, чем если вы закрываете приложение вручную.
Есть ли лучший способ сделать это более отзывчивым?
Обновление - В настоящий момент функция CloseWindow вызывает только Close(), но в конце концов может сделать несколько других бит.
Можно ли убить приложение или должна ли служба закрыть окно правильно? –
Без убийства приложение не является вариантом. – Jon49
«Есть лучший способ» Нет, это должно сработать. Приостановите отладчик во время зависания и посмотрите, что делают все потоки. Должно быть какое-то ожидание. – usr