5

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

Liban
  • 641
  • 5
  • 19
  • 32

3 Answers3

5

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.

logicnp
  • 5,796
  • 1
  • 28
  • 32
2

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.

Sam Axe
  • 33,313
  • 9
  • 55
  • 89
1

Will you write something like below

       try
        {
            Object obj=null;
            var result = obj.ToString();
        }
        catch (Exception )
        {


        }

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

TalentTuner
  • 17,262
  • 5
  • 38
  • 63