通过WCF关闭WPF应用程序花费的时间太长

本文关键字:时间 WCF 关闭 WPF 应用程序 通过 | 更新日期: 2023-09-27 18:03:16

我有一个承载WCF服务的WPF应用程序。该服务的一部分是能够从另一个客户机(运行在同一台机器上)关闭应用程序。我使用以下代码在WCF服务中关闭它:

MainWindow form = MainWindow.CurrentInstance;
form.MySynchronizationContext.Send(_ => form.CloseWindow(), null);

我的MainWindow是用一个静态CurrentInstance变量设置的,所以我可以得到当前窗口,然后我通过SynchronizationContext调用我添加的CloseWindow方法。这一切都很好,除了需要很长时间才能关闭(大约10秒),这比手动关闭应用程序要长得多。

是否有更好的方法来做到这一点,更响应?

Update -目前CloseWindow函数只是调用Close(),但它最终可能会做一些其他的比特

通过WCF关闭WPF应用程序花费的时间太长

我已经找到了这个问题的解决方案,但是我不完全理解为什么这是一个问题,因为它应该已经是这样了。

使用以下

声明服务
[ServiceBehavior(UseSynchronizationContext = false)]

这是我的理解,这句话,即使服务是在MainWindow类中创建的,它仍然会被迫创建自己的线程,而不是在UI线程上运行。但事实似乎并非如此。此后,我在MainWindow类创建之前将主机创建移到了MainWindow类之外,现在关闭几乎立即发生。我只能假设(无需深入研究)usesynsynchronationcontext = false并没有强制服务主机不在UI线程上创建。

虽然这解决了问题,但我很想知道为什么设置服务行为没有什么不同。