This question already has an answer here:
I have a class that receives data from serialport. i used action<T> delegate
to pass data to the form where it is displayed in a textbox. the thing is i could not access the textbox
control, becouse it says: Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on
.
so i set Control.CheckForIllegalCrossThreadCalls = false
, and it is working.
is it good idea to do that? or there is a better way of doing it.
Thanks
Will you write something like below
I am sure your answer would be NO , similar thing is with Control.CheckForIllegalCrossThreadCalls = false, it will just eating exception but present unknown results to your estimated clients
No it's not. A good idea would have been to put your error into a google search. If you had clicked the first link, you would have found a post here on SO that explained it. This way, you only produced another duplicate.
Not a good idea to do that.
I believe the preferred method is to check to see if Control.InvokeRequired == true, and if so then use Control.Invoke with the proper delegate, which will marshall the method call onto the UI thread.
While it may appear to work most of the time, it is sure to fail every now and then.
If you need to access/modify the UI control from another thread, use Control.Invoke.