We take pride in your success. We let our positivity drive us, day in and out. Talk to us at Mindfire to know us more.

Software Technology Tips

If you have ever worked on a multithreaded application, you probably know that accessing controls of UI thread (like textbox, labels etcc...) directly from another thread is not possible.Acessing UI controls directly from a thread other than UI thread would give you a run-time error.

Here is the simple solution to access the UI controls from a background thread .
 
1. Write a function that access the UI controls (here we are displaying error info of the background thread)

 Private Sub DisplayError(ByVal errMsg As String)
 {
  lblMsg.Text = errMsg
 }
 

2. Write another function that decides if it is being called from the UI thread or from another thread- 
If its called from its own thread, call the DisplayError() function directly or else invoke it through a delegate

 private Sub DisplayErrorOnUI(ByVal errMsg As String)
 {
                If (Me.InvokeRequired) Then
                    Dim invokeDelegate As _invokeUIControlDelegate = New _invokeUIControlDelegate(AddressOf DisplayError)
                    Me.Invoke(_invokeUIControlDelegate, errMsg)
                Else
                    DisplayError(errMsg)  
 }

3. Declare a delegate in the class (or form in this case) to the above function (i.e DisplayErrorOnUI())

 Private Delegate Sub _invokeUIControlDelegate(ByVal errMsg As String)

4. In the background thread call the InvokeUIControl() function as required

 Try
  // do something here that gives error
 Catch ex As Exception
  DisplayErrorOnUI(ex.Message)
 End Try


Related Tags:

VB.NET, Multi-Threading, Cross-Threading

Author: Rabinarayan Biswal

top

VB.NET

Let us Connect!

privacy

copyright (c) Mindfire Solutions 2007-2012. Login