我制作了一个连接到 IRC 服务器的小类,现在我正在尝试处理套接字。
每当我这样做时,我都会得到一个
由于线程退出或应用程序请求,I/O 操作已中止
可能值得注意的是,我正在调用 dispose 函数
protected override void OnNavigatedFrom(NavigationEventArgs e)
在处理 StreamSocket 之前,我也尝试过从 DataReader 中分离流,但它仍然无法正常工作。事实上,它引发了另一个错误。
操作标识符无效
我还应该如何处理 StreamSocket?
这就是我想象的 Dipose 方法应该是这样的:
public async void Dispose()
{
_closing = true;
if (_connected)
SendRawMessage("QUIT :");
//_dataReader.DetachStream();
await _clientSocket.DisposeAsync();
_dataReader.Dispose();
_connected = false;
_closing = false;
}
当我连接时,我会这样做:
await _clientSocket.ConnectAsync(hostname, Port.ToString());
_connected = true;
_dataReader = new DataReader(_clientSocket.InputStream) { InputStreamOptions = InputStreamOptions.Partial };
ReadData();
读取数据方法是递归的,并继续读取任何传入的数据:
async private void ReadData() {
if (!_connected || _clientSocket == null || _closing == true) return;
uint s = await _dataReader.LoadAsync(1024);
string data = _dataReader.ReadString(s);
ReadData();
}