1

请告诉我是否有更好的方法来做到这一点。

我有一个 WPF 应用程序,但有时我需要运行一些密集的计算,所以我认为最好在它自己的服务中发生这种情况,而不是产生一个线程来从 WPF 应用程序运行它。

所以这是我的问题:

  • 如何,当 WPF 应用程序打开时,我可以拥有它以便 Windows 服务也被打开?同样,当应用程序关闭时,Windows 服务会停止吗?计算中途是否停止也没关系
  • 如何让 Windows 服务与 WPF 应用程序通信?我需要从 Windows 服务获取信息……比如它正在运行的计算的名称、完成的百分比等等,诸如此类的相当基本的东西。但我能够以某种方式从服务中获取这些信息非常重要,这样我就可以在 WPF 应用程序的 GUI 上显示它。
  • 重要的一点:我还需要一种 GUI 与 Windows 服务对话的方法。例如,我将有一个 GUI 区域,用户可以在其中选择需要处理的某些计算。因此,我需要一种将所选计算列表发送到服务的方法,以便将其添加到计算队列中以运行。

我已经阅读了一些关于 WCF 的内容,但我之前没有使用过它,所以我不确定它是否对我正在做的事情有用。

如果有人对此有任何想法,将不胜感激。这似乎是一件相当简单的事情,但我没有找到有关它的信息 - 我可能正在搜索错误的术语,也许我正在尝试做的事情有一个公认的名称?

谢谢

4

1 回答 1

1

我有一个 WPF 应用程序,但有时我需要运行一些密集的计算,所以我认为最好在它自己的服务中发生这种情况,而不是产生一个线程来从 WPF 应用程序运行它。

一般来说,没有必要这样做。由于 WPF 应用程序已经在运行,与尝试启动服务、使用 IPC 与其通信等相比,生成线程将更快、更简单、开销更少。在应用程序中进行计算通常是正确的方法去吧。


话虽如此,我将尝试按顺序回答您的问题:

如何,当 WPF 应用程序打开时,我可以拥有它以便 Windows 服务也被打开?同样,当应用程序关闭时,Windows 服务会停止吗?计算中途是否停止也没关系

如果你想这样做,你最好不要使用服务。服务通常有一个生命周期,它在Windows启动时启动,在系统关闭时关闭,并且不以用户身份运行。如果您只想启动它,只需将其设为普通(控制台)应用程序,然后使用Process.Start它来启动它。如果有必要,这也可以让你终止进程Process.Kill

如何让 Windows 服务与 WPF 应用程序通信?我需要从 Windows 服务获取信息……比如它正在运行的计算的名称、完成的百分比等等,诸如此类的相当基本的东西。但我能够以某种方式从服务中获取这些信息非常重要,这样我就可以在 WPF 应用程序的 GUI 上显示它。

这通常通过让您的“服务”(或应用程序)成为WCF主机来完成。然后,您的 WPF 应用程序可以充当“服务”的客户端并使用 WCF 传递消息。

重要的一点:我还需要一种 GUI 与 Windows 服务对话的方法。例如,我将有一个 GUI 区域,用户可以在其中选择需要处理的某些计算。因此,我需要一种将所选计算列表发送到服务的方法,以便将其添加到计算队列中以运行。

同样,启动 WCF 主机的过程将完成此操作。

话虽如此,除非有充分的理由这样做,否则仅在应用程序中使用线程要简单得多(并且可能更好),而不必担心单独的进程。

于 2013-03-19T16:09:45.857 回答