Я пытаюсь получить сообщения от 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?