我在尝试处理我创建的事件时遇到问题。 我正在尝试使用 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;
这可能意味着您要么
- 未在同一实例(onLoad 中的 taskRoutingMessage 对象(上触发事件,或
- 您已经在某个时候删除了侦听器。
如果"WebSocketBehavior"以某种方式由框架自动创建,它将不是同一个实例。然后,您可以尝试使用静态事件处理程序:
public static event MessageReceivedEventHandler MessageReceivedEvent;
protected override void OnMessage(MessageEventArgs e)
{
MessageReceivedEvent?.Invoke(this, e);
}
。并在加载中这样设置它:
Core.WebSocketServerWrapper.MessageReceivedEvent +=
TaskRoutingServer_MessageReceivedEvent1;