获取Windows服务与WPF应用程序通信?

时间:2013-03-19 16:06:33

标签: c# wpf service

如果有更好的方法,请告诉我。

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

所以这是我的问题:

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

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

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

由于

1 个答案:

答案 0 :(得分: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主机的过程将实现此目的。

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

相关问题