您好我在我的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,请写我的消息类型是不可接受的。
答案 0 :(得分:1)
您可能正在连接的套接字上调用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
。但是,请注意一些仍然不是最佳的事情:
MessageReceived
安装多个处理程序,因此它们可能会混淆。