- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 C# 在 WinRT 上编写一个客户端应用程序,它通过 TCP 连接到多个服务器。对于 TCP 连接,我使用 StreamSocket。然后将输入和输出字符串包装在 DataWriter 和 DataReader 中。当我连接到多个服务器时,出现以下异常:“操作标识符无效”
这是方法的代码:
private async void read()
{
while (true)
{
uint bytesRead = 0;
try
{
bytesRead = await reader.LoadAsync(receiveBufferSize);
if (bytesRead == 0)
{
OnClientDisconnected(this);
return;
}
byte[] data = new byte[bytesRead];
reader.ReadBytes(data);
if (reader.UnconsumedBufferLength > 0)
{
throw new Exception();
}
OnDataRead(this, data);
}
catch (Exception ex)
{
if (Error != null)
Error(this, ex);
}
new System.Threading.ManualResetEvent(false).WaitOne(10);
}
}
Stacktrace 仅将 reader.LoadAsync(UInt32 count) 方法显示为问题的根源。每个 ClientInstance 都在自己的任务中运行,并拥有自己的 DataReader 和 Stream 实例。 “receiveBufferSize”为 8192 字节。
您知道错误可能是什么吗?
最佳答案
我想我现在可以自己回答我的问题了。问题是 LoadAsync 方法不能很好地与 await/async 构造一起使用。该方法由 ThreadPool 线程 A 调用,然后由 ThreadPool 线程 B 恢复(在 await 之后)。此星座抛出异常。但我不能确切地说出为什么...
有了这个答案 ( How to integrate WinRT asynchronous tasks into existing synchronous libraries? ),我将 LoadAsync 方法写入同步方法,现在它可以工作了,因为同一个线程正在调用该方法并使用它的结果。
修改后的代码片段:
IAsyncOperation<uint> taskLoad = reader.LoadAsync(receiveBufferSize);
taskload.AsTask().Wait();
bytesRead = taskLoad.GetResults();
感谢 Geoff 带我走上正确的线程之路 :)我希望我能帮助同样(将)遇到此问题的人。
关于c# - StreamSocket TCP 的 WinRT : DataReader. LoadAsync 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110561/
我正在通过创建一些项目来学习 React Native。 我卡住了,无法加载自定义字体。我关注了this来自世博会文档的指南。但是我收到一个错误 fontFamily "raleway-bold" i
// Asynchronously load and execute a script from a specified URL function loadasync(url) { var head
假设我正在使用线程,它在 Windows::Storage::Streams::DataReader (m_reader) 的帮助下从网络套接字 (Windows::Networking::Socke
我正在尝试通过 WebAPI 调用从 RavenDb 加载文档。当我打开一个异步 IDocumentSession 并调用 LoadAsync 时,我没有得到任何异常或结果,线程立即退出,没有错误代码
当我遇到问题时,我正在我的项目中添加一些异步调用。 Session 和 AsyncSession 之间的相同调用没有返回我的文档。 这里是文档: class Company { string
我有一个程序,用户可以在其中查看保存在 XAML 中的各种 3D 模型,然后使用 TrackballDecorator 操作 Viewport3D。这些 XAML 文件中包含转换,我使用问题 WPF
我正在尝试通过 StreamSocket 发送 HTTP 请求,但响应被 chop 为 “failedWinRTError:对象已关闭。” 这是我的代码: var count, hostName,
我的 Windows Phone 8 应用程序中有以下代码。 //connection code, done during app start socket = new StreamSocket();
我想将数据库中的图像异步加载到图片框中。我该怎么做?现在我有: byte[] byteBLOBData = new byte[0]; byteBLOBData = (byte[])ds.Tables[
我正在将 React Native 与 Expo 结合使用,除了自定义字体的问题之外,一切都很顺利。我的字体 Lobster-Regular.ttf 在 ./assets/fonts 中,并且我一直在
我正在创建一个 Win 8 商店应用程序,我在其中使用 StreamSocket 连接到一个用 Java 编写的服务器。当我在调试中运行应用程序时,在 StreamSocket.ConnectAsyn
我在使用 Windows 8 UI 应用程序时遇到问题。我正在使用客户端-服务器通信,客户端需要一直检查新消息。所以我使用这样的代码,其中 _socket 是一个 StreamSoket: p
import React, { Component } from 'react'; import { View, TextInput, } from 'react-native'; imp
我的应用程序使用 CRNA 和 Expo,我的问题是 Font.loadAsync() 异步函数无法在我的项目目录的 asset/fonts/文件夹中找到 .otf 字体文件。我绝对确定目录和文件名是
我正在使用 C# 在 WinRT 上编写一个客户端应用程序,它通过 TCP 连接到多个服务器。对于 TCP 连接,我使用 StreamSocket。然后将输入和输出字符串包装在 DataWriter
我使用以下代码在 UWP WinRT 上使用 JSON 流: async function connect() { let stream: MSStream; return new C
有没有办法将 PictureBox 绑定(bind)到字符串,以便当字符串发生变化时,它会使用字符串中的 url 调用 LoadAsync() 并加载图像? 目前这是我在自动生成的代码中所拥有的。 t
我有一个 React Native,React 混合应用程序。对于 React Native,我使用的是 react-native-elements。 我的应用程序使用 Expo 运行,并使用 rea
这是react expo项目,使用react-native-form-validation进行验证时出现错误。 0 && errors.fullName} status={errors.fu
这是react expo项目,使用react-native-form-validation进行验证时出现错误。 0 && errors.fullName} status={errors.fu
我是一名优秀的程序员,十分优秀!