Его довольно простая программа. Я пытаюсь прочитать сообщения от контроллера после того, как я отправлю сообщение, которое запрашивает отправку постоянных сообщений. Первая часть - это то, как мне удалось заставить чтение работать по назначению, и каждый раз, когда отправляется сообщение, я могу видеть его в Консоли. Я хочу воссоздать этот сценарий с задачей в коде ниже. Как бы мне не удавалось это сделать.Использование задачи Async для чтения из потока, а не бесконечного цикла while
if (success)
{
if (fileStreamDeviceData.CanRead)
{
while(success)
{
await fileStreamDeviceData.ReadAsync(outputReportBuffer, 0, outputReportBuffer.Length);
for (int b = 0; b < 12; b++)
{
Console.Write(outputReportBuffer[b] + " ");
}
Console.WriteLine();
}
}
}
Таким образом, вышеуказанная часть работает так, как предполагалось, за исключением уродливого бесконечного цикла while, который в настоящее время происходит. Следующие 2 части кода являются решением для этого, но не работают должным образом, и я, похоже, ничего не получаю от этого. Я действительно сосать с асинхронными задачами и прочее, поэтому, возможно, кто-то может помочь мне исправить этот раздел.
if (success)
{
outputReportBuffer = null;
//start async reading
try
{
outputReportBuffer = await ReadByteAsync();
for (int b = 0; b < outputReportBuffer.Length; b++)
{
Console.Write(outputReportBuffer[b] + " ");
}
Console.WriteLine();
}
catch (Exception ex)
{
throw ex;
}
}
private async Task<Byte[]> ReadByteAsync()
{
Byte[] result = null;
Byte[] outputReportBuffer = null;
using (fileStreamDeviceData)
{
outputReportBuffer = new Byte[MyHid.Capabilities.OutputReportByteLength];
int byteRead;
while ((byteRead = await fileStreamDeviceData.ReadAsync(outputReportBuffer, 0, outputReportBuffer.Length)) != 0)
{
result = outputReportBuffer;
}
return result;
}
}
Я не получаю никакого исключения или никакого выхода, когда я пользуюсь этим Кодексом.
Этот первый считываемый цикл является просто неправильным; вы не проверяете ** результат ** «ReadAsync» - он мог бы законно вернуть только 1 байтовую итерацию, если захочет –
. Вы просто обновляете одну ссылку на буфер каждый цикл итерации, каждый раз назначая ее одному буферу. Что вы хотите делать, когда читаете что-то? –
Что именно не работает? Вы не получаете никаких исключений, но печатаете ли вы что-нибудь на консоль? –