我制作了一款连接服务器以获得高分的游戏。它在第一个连接中工作正常(然后我关闭数据编写器/读取器,并且当连接应该一次性检索数据时,streamsocket)。 但在我尝试第二次连接后,我收到“InvalidOperationException未被用户代码处理”。在意外的时间调用了一个方法。
我使用以下模板进行客户端连接: StreamSocket sample
那么如何在此操作之后杀死线程池中的所有线程,因为我认为阻塞第二个连接的是什么?
这似乎是一个时间问题,因为如果我在loadasync方法上设置一个断点并逐步执行代码,它将在第二个连接上工作吗?
由于
public async void ScoreUpdate(string input)
{
DataWriter writer = new DataWriter(socket.OutputStream);
DataReader reader = new DataReader(socket.InputStream);
string stringToSend = input;
writer.WriteString(stringToSend);
try
{
uint returnLength = await writer.StoreAsync();
uint sizeFieldCount = await reader.LoadAsync(4);
if (sizeFieldCount != sizeof(uint))
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
uint stringLengthSize = reader.ReadUInt32();
uint stringLength = await reader.LoadAsync((uint)stringLengthSize -4);
UpdateScore = reader.ReadString(stringLength);
socket.Dispose();
socket = null;
}
catch (Exception exception)
{
// If this is an unknown status it means that the error if fatal and retry will likely fail.
if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
{
throw;
}
socket.Dispose();
socket = null;
}
}
}