消息 Web 套接字获取异常 在意外时间调用了某个方法

本文关键字:调用 方法 时间 意外 套接字 Web 获取 异常 消息 | 更新日期: 2023-09-27 18:32:09

嗨,我

在我的Windows应用商店应用程序中使用MessageWebSocket,但是当我调用方法mws()时,我得到:

在意外时间调用了方法

我需要从另一个类调用此方法,因为我想对一个连接使用相同的 MessageWebSocket,这就是我的方法静态的原因。

    private static MessageWebSocket messageWebSocket = null;
    public static MessageWebSocket mws()
    {
        if (messageWebSocket == null)
        messageWebSocket =  new MessageWebSocket();
        return  messageWebSocket;
    }
private async void websocketRequestRegisterDevice(object sender, TappedRoutedEventArgs e)
    {
        ...
        cos.WriteRawBytes(new byte[] { 7, 1, 0, 0 });
        req.WriteTo(cos);
        mws();
        mws().Control.MessageType = SocketMessageType.Binary;
        mws().MessageReceived += websocketResponseRegisterDevice;
        await mws().ConnectAsync(server);
        messageWriter = new DataWriter(mws().OutputStream);
        messageWriter.WriteBytes(buff);
        await messageWriter.StoreAsync();
    }

我在异步方法中调用它,但如果我想使用 await 写信给我,例如消息类型不可等待。

消息 Web 套接字获取异常 在意外时间调用了某个方法

您可能正在连接的套接字上调用ConnectAsync

所以你想要这样的东西:

private static Task<MessageWebSocket> messageWebSocket = null;
public static Task<MessageWebSocket> mws()
{
    if (messageWebSocket == null)
        messageWebSocket = CreateMessageWebSocket();
    return  messageWebSocket;
}
private static async Task<MessageWebSocket> CreateMessageWebSocket()
{
    var ret = new MesesageWebSocket();
    await ret.ConnectAsync();
    return ret;
}
private async Task websocketRequestRegisterDevice(object sender, TappedRoutedEventArgs e)
{
    ...
    cos.WriteRawBytes(new byte[] { 7, 1, 0, 0 });
    req.WriteTo(cos);
    var s = await mws();
    s.Control.MessageType = SocketMessageType.Binary;
    s.MessageReceived += websocketResponseRegisterDevice;
    messageWriter = new DataWriter(s.OutputStream);
    messageWriter.WriteBytes(buff);
    await messageWriter.StoreAsync();
}

我还将您的async void方法更改为async Task,因为您应该避免async void。但是,请注意一些仍然不是最佳的事项:

  1. 有比静态字段更好的方法来处理连接共享。
  2. 您的各种方法仍在为MessageReceived安装多个处理程序,因此它们可能会感到困惑。