繁体   English   中英

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

[英]Closing WPF Application Via WCF Takes Too Long

我有一个托管WCF服务的WPF应用程序。 该服务的一部分是从另一个客户端(在同一台计算机上运行)关闭应用程序的能力。 我使用以下代码在WCF服务中将其关闭:

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

我的MainWindow是使用静态CurrentInstance变量设置的,因此我可以获取当前窗口,然后通过SynchronizationContext调用添加的方法CloseWindow。 所有这些都可以正常工作,只是关闭它需要很长时间(大约10秒),这比手动关闭应用程序要长得多。

有没有更好的方法来做到这一点,并且响应速度更快?

更新-目前,CloseWindow函数仅调用Close(),但最终可能还会执行其他一些操作。

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

声明了以下服务

[ServiceBehavior(UseSynchronizationContext = false)]

我的理解是,即使使用MainWindow类创建了该语句,该服务仍将被迫创建自己的线程,而不是在UI线程上运行。 事实证明似乎并非如此。 从那以后,我在创建主机之前将主机创建移到了MainWindow类之外,现在关闭几乎立即发生。 我只能假定(无需更深入地研究)UseSynchronizationContext = false不会强制在UI线程上不创建服务主机。

尽管这可以解决问题,但我很想知道为什么设置服务行为没有任何区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM