Click here to Skip to main content
12,819,095 members (31,105 online)
Click here to Skip to main content
Add your own
alternative version


84 bookmarked
Posted 7 Oct 2006

How to solve "Cross thread operation not valid"

, 7 Oct 2006 CPOL
Rate this:
Please Sign up or sign in to vote.
how to access a control from another thread which didn't create this control.
how to access a control from another thread which didn't create this control.

I faced this issue more than 1 time, I decided to collect info about it and made some changes on the code to simplify this problem to you cause it's really annoying and confusing to work with threading stuff. Here is a small code solves this problem FOREVER and in ANY case.


<quote /> Cross thread operation not valid: Control "XXXXXXXXXX" accessed from a thread other than the thread it was created.</quote />


1- Create your thread:

Private Strt As System.Threading.Thread

2- Start your thread wherever you want:

Strt = New System.Threading.Thread(AddressOf MyThread1)

3- Add the thread sub (MyThread1) and put whatever you want and remember that the lines which access a control from this thread will be separated to into another sub (the Delegate sub)

 Sub MyThread1
       ' Working code
       ' Working code
       ' Working code
       ' Working code
       ' Working code
       ' Working code


End Sub

From the previous code you will notice 2 things:
1st: AccessControl the sub which will be delegated.
2nd: ' Working code - which doesn't need a delegate to get it work. In other mean, it doesn't show up the error message you receive.

4- and finally, add the delegated sub:

Private Sub AccessControl()
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf AccessControl)) 
    ' Code wasn't working in the threading sub
    ' Code wasn't working in the threading sub
    ' Code wasn't working in the threading sub
    ' Code wasn't working in the threading sub
    ' Code wasn't working in the threading sub
            Button2.Visible = True
            Button3.Visible = True
            Opacity = 1
            ShowInTaskbar = True
        End If
    End Sub

From the previous code you will notice that all the codes which wasn't working in the threading sub will be added after "Else" line.
examples for some codes which needs to be delegated:

I hope i simplified it enough, and now no worry about this issue again.
Special thanks to jmcilhinney for his help. You can also find this article at this link:
Have a nice day :)


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer (Senior) InfraDrive
Egypt Egypt
Egyptian freelance programmer and the founder of InfraDrive, Inc.


You may also be interested in...


Comments and Discussions

GeneralMy vote of 5 Pin
Sunasara Imdadhusen9-Sep-11 4:19
memberSunasara Imdadhusen9-Sep-11 4:19 
GeneralMy vote of 5 Pin
Nanda_MR14-Mar-11 0:34
memberNanda_MR14-Mar-11 0:34 
GeneralI laughed a lot :) Pin
Member 102216227-Oct-10 0:17
memberMember 102216227-Oct-10 0:17 
GeneralYou missed the point. Pin
Elagizy27-Oct-10 5:14
memberElagizy27-Oct-10 5:14 
You must be aware of when calling controls inside this method. That method will run codes without being threaded so if there is any problem in your control then that's the problem which leads to make the application hangs because the method executes codes in the main thread (application) not the thread you've created so when the control hangs, the application hangs. My solution works perfectly with any standard control.invoke or a well constructed custom control. The windows application itself is a primary thread, and when you create another thread and calling controls that are property of the windows application that leads to "Cross thread operation not valid" because there are 2 threads trying to deal with 1 control at the same time.

For the 2nd issue, you must not set the visibility of the control to false. Instead, set the position of the control behind another control. That will fix it Wink | ;)
Best Regards,
Ehab El-agizy

GeneralMy vote of 5 Pin
L3CodeProject22-Oct-10 11:47
memberL3CodeProject22-Oct-10 11:47 
GeneralSimply Great!! Pin
rahu_12221-Sep-10 21:37
memberrahu_12221-Sep-10 21:37 
Generalthanks :) :) Pin
ArunJoseph 471639512-Sep-10 6:30
memberArunJoseph 471639512-Sep-10 6:30 
GeneralThank You Pin
jb.jigar30-Jul-10 9:39
memberjb.jigar30-Jul-10 9:39 
GeneralMy vote of 5 Pin
jb.jigar30-Jul-10 9:11
memberjb.jigar30-Jul-10 9:11 
QuestionWhat if the method is a handler of a PropertyChanged Event from an updated class variable? Pin
bretddog1-Apr-10 1:01
memberbretddog1-Apr-10 1:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170308.1 | Last Updated 7 Oct 2006
Article Copyright 2006 by Elagizy
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid