从窗体处理类中的自定义事件



我在尝试处理我创建的事件时遇到问题。 我正在尝试使用 WebSockets,当我收到一条消息时,我想引发一个事件,我的某个窗体可以订阅该事件。

在我的Form_Load事件中。我有:

taskRoutingServer = new Core.WebSocketServerWrapper();
taskRoutingServer.MessageReceivedEvent += 
TaskRoutingServer_MessageReceivedEvent1;

我的窗体中的方法如下所示:

private void TaskRoutingServer_MessageReceivedEvent1(object sender, WebSocketSharp.MessageEventArgs e)
{
throw new NotImplementedException();
}

我打算处理和使用"e",它将包含我的表单需要使用的数据。 我拥有的 WebSocket 类如下所示:

public class WebSocketServerWrapper : WebSocketBehavior
{
private WebSocketServer socketServer;
public delegate void MessageReceivedEventHandler(object sender, MessageEventArgs e);
public event MessageReceivedEventHandler MessageReceivedEvent;
public string creator;
public WebSocketServerWrapper()
{
socketServer = new WebSocketServer("ws://localhost:9001");
socketServer.AddWebSocketService<WebSocketServerWrapper>("/ws");
}
public bool IsListening()
{
return socketServer.IsListening;
}
public void StartListening()
{
socketServer.Start();
}
public void StopListening()
{
socketServer.Stop();
}
protected override void OnMessage(MessageEventArgs e)
{
//invoke event
MessageReceivedEvent?.Invoke(this, e);
}
}

当前的行为是OnMessage触发但MessageReceivedEvent为 null,因此不会调用该事件。 我应该如何正确处理此事件?

此时MessageReceivedEvent 不应为 null:

MessageReceivedEvent?.Invoke(this, e);

当您向其添加侦听器时,您在 OnLoad 中编写了侦听器:

taskRoutingServer.MessageReceivedEvent += TaskRoutingServer_MessageReceivedEvent1;

这可能意味着您要么

  1. 未在同一实例(onLoad 中的 taskRoutingMessage 对象(上触发事件,或
  2. 您已经在某个时候删除了侦听器。

如果"WebSocketBehavior"以某种方式由框架自动创建,它将不是同一个实例。然后,您可以尝试使用静态事件处理程序:

public static event MessageReceivedEventHandler MessageReceivedEvent;
protected override void OnMessage(MessageEventArgs e)
{
MessageReceivedEvent?.Invoke(this, e);
}

。并在加载中这样设置它:

Core.WebSocketServerWrapper.MessageReceivedEvent += 
TaskRoutingServer_MessageReceivedEvent1;

相关内容

  • 没有找到相关文章

最新更新