通过 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 变量设置,因此我可以获得当前 window,然后我通过 SynchronizationContext 调用我添加的名为 CloseWindow 的方法。这一切都很好,除了需要很长时间才能关闭(大约 10 秒),这比手动关闭应用程序要长得多。
是否有更好的响应速度更快的方法?
更新 - 目前 CloseWindow 函数仅调用 Close(),但它最终可能会执行一些其他操作。
我已经找到了这个问题的解决方案,但我不完全理解为什么这首先是一个问题,因为它本来应该是这样的。
服务声明如下
[ServiceBehavior(UseSynchronizationContext = false)]
据我了解,使用此语句,即使服务是在 MainWindow class 中创建的,它仍然会被迫创建自己的线程,而不是 运行 在 UI线程。事实证明这似乎并非如此。从那以后,我在创建主机之前将主机创建移到了 MainWindow class 之外,现在关闭几乎立即发生。我只能假设(无需深入挖掘)UseSynchronizationContext = false 不会强制不在 UI 线程上创建服务主机。
虽然这解决了问题,但我很想知道为什么设置服务行为没有任何区别。
我有一个托管 WCF 服务的 WPF 应用程序。该服务的一部分是能够从另一个客户端(运行 在同一台机器上)关闭应用程序。我使用以下代码在 WCF 服务中关闭它:
MainWindow form = MainWindow.CurrentInstance;
form.MySynchronizationContext.Send(_ => form.CloseWindow(), null);
我的 MainWindow 使用静态 CurrentInstance 变量设置,因此我可以获得当前 window,然后我通过 SynchronizationContext 调用我添加的名为 CloseWindow 的方法。这一切都很好,除了需要很长时间才能关闭(大约 10 秒),这比手动关闭应用程序要长得多。
是否有更好的响应速度更快的方法?
更新 - 目前 CloseWindow 函数仅调用 Close(),但它最终可能会执行一些其他操作。
我已经找到了这个问题的解决方案,但我不完全理解为什么这首先是一个问题,因为它本来应该是这样的。
服务声明如下
[ServiceBehavior(UseSynchronizationContext = false)]
据我了解,使用此语句,即使服务是在 MainWindow class 中创建的,它仍然会被迫创建自己的线程,而不是 运行 在 UI线程。事实证明这似乎并非如此。从那以后,我在创建主机之前将主机创建移到了 MainWindow class 之外,现在关闭几乎立即发生。我只能假设(无需深入挖掘)UseSynchronizationContext = false 不会强制不在 UI 线程上创建服务主机。
虽然这解决了问题,但我很想知道为什么设置服务行为没有任何区别。