gpt4 book ai didi

c# - 使用 C# 监听文本/事件流

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:17 25 4
gpt4 key购买 nike

我正在编写一个 C# 类来封装一个简单的 Web 服务。 RESTful 的内容很容易总结,但现在我需要在服务器上的某些内容发生变化时引发事件。

我已将服务器设置为使事件流可用,但我不知道如何在 C# 中获取该流。

目前我正在做这样的事情:

public class ServiceWrapper
{
private readonly wc = new WebClient();

public ServiceWrapper()
{
wc.OpenReadAsync(new Uri(UriOfEvent));
wc.OpenReadCompleted += ServerEventOccurs;
}

private void ServerEventOccurs(object sender, OpenReadCompletedEventArgs args)
{
using (var sr = new StreamReader(args.Result))
{
var message = ParseStream(sr);
RaiseServerEventOccurred(message);
}

wc.OpenReadAsync(new Uri(UriOfEvent));
}

//usual code for declaring and raising ServerEventOccurred event
}

在我的测试中,事件被拾取了一次,但没有两次。服务器上的事件本质上是一个开关 - 发生某些事情并继续,其他事情发生并关闭。我知道切换有效,因为我已将事件流连接到普通网页以对其进行测试。

我应该如何在 C# 中处理事件流?

编辑 1:我已经更新了代码以修复 TimVK 指出的错误,但事件流仍然没有被第二次拾取。

最佳答案

当您将 wc 作为类中的一个属性而不是在您的方法中始终创建一个新属性时,它不会起作用吗?

public class ServiceWrapper 
{
WebClient wc {get;set;}
public ServiceWrapper()
{
wc = new WebClient();
wc.OpenReadAsync(new Uri(UriOfEvent));
wc.OpenReadCompleted += ServerEventOccurs;
}

private void ServerEventOccurs(object sender, OpenReadCompletedEventArgs args)
{
using (var sr = new StreamReader(args.Result))
{
var message = ParseStream(sr);
RaiseServerEventOccurred(message);
}

wc = new WebClient();
wc.OpenReadAsync(new Uri(UriOfEvent));
}

//usual code for declaring and raising ServerEventOccurred event
}

那么我想应该每次都引发该事件。

关于c# - 使用 C# 监听文本/事件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11466595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com