繁体   English   中英

如何从WPF和C#调用Windows服务异步

[英]How to call a Windows service async from WPF & C#

我已经用C#编写了Windows服务。 仅出于测试目的,我需要在服务上放置一个临时WPF前端。 我正在使用WPF服务中的ServiceController类来允许启动和停止该服务,但是我需要在测试过程中将数据发送回UI,以使测试人员知道何时有足够的数据通过该服务来停止它。

可以使用属性:

[OperationContract (IsOneWay = true)]

或异步

在服务内部添加一个提供所需信息的方法,然后可以在UI中选择一个事件来调用该方法。

假设每当您在用户界面中点击一个按钮时,就调用服务方法>

private void Button_Click(object sender, EventArgs e)
{
    yourservice.GetInfo();
}

我的建议是,选择适合自己需求的最佳事件,甚至可以在UI内发生的每个事件中调用它。

您可以创建一个带有while循环的异步方法,该方法可以在给定的时间不断检查服务。

public async Task<int> CheckServiceAsync()
{
   while(condition)
   {
      Thread.Sleep(1000);
      return service.GetInfo();
   }
}

然后在您的用户界面中:

TextBox.Text = await CheckServiceAsync();

我认为异步方式是最好的,因为您的UI不会在等待服务响应时被锁定。

编辑:

您需要一种在两个应用程序之间进行通信的方法。 我以为您已经设置好了。 您将需要WCF(可以使用命名管道)应用程序在它们之间进行通信。 您的服务和WPF应用程序在不同的进程中运行。 检查一下 NetNamedPipeBinding对于同一台计算机上的进程最快。

命名管道(不使用WCF)的级别有点低,可能会变得很难。 WCF更容易,您可以真正快速地设置(一旦您知道自己在做什么)。 设置您的WCF,使用我在此答案中给您的逻辑,您会很好。

检查此WCF教程 它具有配置所需的基础知识,但请确保使用NetNamedPipeBinding作为绑定。

暂无
暂无

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

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