2014-11-19 3 views
0

с использованием файлового потока с файловым дескриптором для связи с USB-HID-устройством Устройство Resend Report (массив байтов [64]) по мере его поступления. получить метод происходит в другом потоке, запускающего события, когда отчеты считывают ,,filestream C# повторно считывать данные

Каждая попытка посылает ТОЛЬКО ОДИН «Отчет» первая попытка Ok ,, 1 отчет получен, но когда я посылаю снова читает его в два раза! (он доступен дважды в filestream ??) при следующей попытке событие снова срабатывает дважды! после этого добавить его в три раза в течение следующих 3-х попыток

attempt 1 1 report received 
attempt 2 2 reports received 
attempt 3 2 reports received 
attempt 3 3 reports received 
attempt 4 3 reports received 
attempt 5 3 reports received 
attempt 6 4 reports received 
attempt 7 4 reports received 

любые другие сообщения, отправленные причиной 4 доклада получил есть какое-либо логическое описание для этого?

код:

private void WriteData(object Data) 
    { 
     byte[] data = Data as byte[]; 
     int bytesSent = 0; 
     while (bytesSent < data.Length) 
     { 
      byte [] OutputReportBuffer = new byte[64]; 
      for (int i = 0; i < OutputReportBuffer.Length; i++) 
       if (bytesSent < data.Length) 
       { 
        OutputReportBuffer[i] = data[bytesSent]; 
        bytesSent++; 
       } 
       else OutputReportBuffer[i] = 0; 
      try 
      { 
       fileStream.Write(OutputReportBuffer, 0, OutputReportBuffer.Length); 
       fileStream.Flush(); 
      } 
      catch///deducted code 
     } 
    } 

здесь, где его получил (отдельный поток, который запускает событие, когда данные считываются)

private void ReadData() 
    { 
     while (true) 
     { 
      try 
      { 
       if (fileStream.Read(ReceivedDataBuffer, 0, ReceivedDataBuffer.Length) > 0) 
       { 
        _Context.Send(o => 
        { 
         if (DataReceived != null) 
          DataReceived(this, new DataReceivedEventArgs(ReceivedDataBuffer)); 
        }, null); 
       } 
      } 
      catch //deducted code 
     } 
} 
+0

Код пожалуйста. Вероятно, вы не оцениваете результат чтения. – usr

+0

Я добавил код –

+0

Добро пожаловать в StackOverflow! См. [«Если вопросы включают« теги »в их названиях?») (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны». –

ответ

0

Вы не используете возвращаемое значение Read, чтобы узнать, сколько байтов вы действительно получили.

+0

это всегда ReceivedDataBuffer.Length (64), или это всего лишь 0 только те два результата в моем случае –

+0

Тогда, возможно, это состояние гонки. Отправляется асинхронно? В любом случае ошибка здесь не видна, и вам нужно будет отправить больше кода. – usr

+0

вы, где правильно, я должен добавить весь код, это было два ошибки в коде, и он теперь решается в комментариях к вопросу ,, спасибо –

Смежные вопросы