0

Я пытаюсь получить сообщения от Chrome с помощью Google NativeMessaging, мое WinForms приложения читает сообщения, отправленные с моего расширения в Chrome с помощью вызова следующей функции каждого 0.1с:STDIN поврежден при чтении из не UI нити

Public Function read_message() As String 
     'Read in first 4 bytes for length... 
     Dim stdin As Stream = Console.OpenStandardInput() 

     Dim bytelen(LENGTH_BYTE_COUNT - 1) As Byte 
     stdin.Read(bytelen, 0, LENGTH_BYTE_COUNT) 

     Dim msglen As Integer = BitConverter.ToInt32(bytelen, 0) 

     'Read the message 
     Dim msg As String = "" 
     For i As Integer = 0 To msglen - 1 
      msg &= ChrW(stdin.ReadByte()) 
     Next i 

     stdin.Close() 
     stdin.Dispose() 

     Return msg 
    End Function 

Все работает отлично в описанном выше сценарии, однако, я хотел, чтобы эта функция повторялась в другой теме.

Поэтому, когда я создаю новый поток, который имеет аналогичный таймер с аналогичным интервалом, результаты становятся беспорядком, текстовыми сообщениями из перекрытий Chrome, некоторые сообщения просто пропущены, а некоторые возвращают поврежденные сообщения, и я не могу понять, почему это прекрасно работает в потоке пользовательского интерфейса, а дает странные результаты в другом, даже если я расслабляю время чтения, какие-то подсказки?

PS

В качестве побочного вопроса, я на самом деле не уверен, что с помощью таймера для чтения сообщений из стандартного ввода является лучшим подходом, учитывая, что я должен использовать Winforms, есть ли лучший способ определить, когда сообщение " прибывает "в поток stdin?

ответ

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