Avatar of Clay Willing
Clay WillingFlag for United Arab Emirates

asked on 

UDP Data Capture Thread Issue

Hi All,

I am trying a new approach to my data capture/monitor project.  I have read up on a lot of vb.net UDP actions and methods and I have had some success.  However, I am now at a loss.  I have a server that listens on a thread for data that arrives and shows the sender ip:port and the text received.  This is derived from the code on this technotif page:
http://technotif.com/creating-simple-udp-server-client-transfer-data-using-c-vb-net/

With their example and a bit of tweaking as it was written before VS2017, I got both sender and receiver to work.  My next step was to break out of seeing both IP and text received in one box because I want to display them separately and use a traffic light if data is lost as the datastream will be 24H7.  The ultimate app goal is to handle what could be multiple UDP datagrams (up to 12 from outside my local network), all sources identified in a list box, capture the dat in hex and write to a file for 1 hour and then recapture and of course in parallel will be a window showing that all identified sources are still being received so if one is lost a label will turn from green to red.

The latest hurdle I can't seem to get over is that any of the lines after Line 18 line throws an invalidoperationexception and I can't figure out why.  All I have done is split the original concatenated text into two boxes and added a color change to the text box, which was working fine.

I have added snips of the exception and the thread menu item.

Appreciate any thoughts.

Regards,

Clay
[/code]
Imports System.Threading
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim ThdUDPServer = New Thread(New ThreadStart(AddressOf ServerThread))
        ThdUDPServer.Start()
    End Sub

    Public Sub ServerThread()
        Dim UdpClient As New UdpClient(8080)
        While True
            Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
            Dim ReceiveBytes As Byte()
            ReceiveBytes = UdpClient.Receive(RemoteIpEndPoint)
            Dim ReturnData As String = Encoding.ASCII.GetString(ReceiveBytes)
            TxtDataRx.BackColor = Color.Green
            LbConnections.Items.Add(RemoteIpEndPoint.Address.ToString())
            TxtDataRx.Text = TxtDataRx.Text & vbCrLf & returnData.ToString()

        End While
    End Sub
End Class


[/code]
User generated imageUser generated imageUser generated image
Visual Basic.NET* udp/ip

Avatar of undefined
Last Comment
Fernando Soto
Avatar of Fernando Soto
Fernando Soto
Flag of United States of America image

Hi Clay;

According to the exception you are attempting to access a GUI control from a thread that did not create it, this is not allowed. The object ThdUDPServer is created in a new thread and the code in that thread is trying to change the control state. Please see this Microsoft web page to see how to get around this issue. How to: Make Thread-Safe Calls to Windows Forms Controls
Avatar of Clay Willing
Clay Willing
Flag of United Arab Emirates image

ASKER

Fernando ,
I did look into this but I can't see why the code worked at first and then adding the extra line now means the thread is broken.
As far as I can see the list box works okay in isolation but I can't change the text box too.
If I focus on the unsafe thread, do you have any pointers on what to change the code to be safe?
Hi Clay;

In the link I posted read the section called "Making Thread-Safe Calls to Windows Forms Controls" it has sample code showing what is needed.
ASKER CERTIFIED SOLUTION
Avatar of it_saige
it_saige
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Clay Willing
Clay Willing
Flag of United Arab Emirates image

ASKER

Fantastic. In that case I have a bit of work ahead of me to see how they both relate to the thread unsafe call note in msdn.
Appreciate the assistance
Next step will be to see how many instances the receiver can pick up and handle.
Also no error handling yet and no elegance exiting of the app.  Cleaning up was a big thing in charge for me but this is more a learning curve just now.
Thanks again
Avatar of Clay Willing
Clay Willing
Flag of United Arab Emirates image

ASKER

As per last post thanks saige
Well you can't win them all.
Visual Basic.NET
Visual Basic.NET

Visual Basic .NET (VB.NET) is an object-oriented programming language implemented on the .NET framework, but also supported on other platforms such as Mono and Silverlight. Microsoft launched VB.NET as the successor to the Visual Basic language. Though it is similar in syntax to Visual Basic pre-2002, it is not the same technology,

96K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo