2013-12-09 3 views
2

Я выполнил большой объем поиска, и я уверен, что я рядом, но у меня проблемы и надеюсь, что кто-то может помочь.Прочтите ASync Network Stream

У меня есть сканер штрих-кода в сети Ethernet, который мне нужно постоянно слушать. Я пробовал использовать NetworkStream. Читайте в отдельном потоке, но затем обнаружил, что есть функция «BeginRead» для сетевых потоков async. Проблема в том, что я не могу заставить ее работать вообще.

Вот код, который я получил:

Public Class ScannerConnect 
    Private client As TcpClient 
    Property server As String 
    Property port As Int32 = 2005 
    Private data As [Byte]() 


    Sub Connect() 
     Try 
      client = New TcpClient(server, port) 
     Catch e As ArgumentNullException 
      Console.WriteLine("ArgumentNullException: {0}", e) 
     Catch e As SocketException 
      Console.WriteLine("SocketException: {0}", e) 
     End Try 
    End Sub 'Connect 

    Sub ListenASync() 
     stream = client.GetStream() 
     data = New [Byte](256) {} 
     stream.BeginRead(data, 0, data.Length, AddressOf ReadASync, stream) 
    End Sub 

    Private Sub ReadASync(ar As IAsyncResult) 
     Dim buffer As Byte() = TryCast(ar.AsyncState, Byte()) 
     Dim bytesRead As Integer = stream.EndRead(ar) 
     Dim message As String = Encoding.ASCII.GetString(buffer, 0, bytesRead) 

     MsgBox(message) 

     stream.BeginRead(buffer, 0, buffer.Length, AddressOf ReadASync, buffer) 
    End Sub 
End Class 

Он падает на Dim сообщение Как String = Encoding.ASCII.GetString(buffer, 0, bytesRead) с ошибкой Array не может быть null.

Любые идеи, что я делаю неправильно?

+0

Если TryCast терпит неудачу, не будет 'Byte' быть пустым/пустым, и, поскольку вы не проверяете его, вы получаете ошибку – Plutonix

ответ

2

Вы прошли stream (a NetworkStream) в качестве параметра AsyncState до BeginRead().
Вы не можете отличить его от Byte() в обратном вызове EndRead.

+0

Ну теперь я просто чувствую себя глупо. Большое спасибо...! – Jonno

+0

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