One problem while working with Threads in C# is that a background thread cannot ‘talk’ to the any visual elements that exists in the main GUI thread, because talking to objects across thread boundaries is forbidden. The reasons are obvious; because a thread has its own process space, the address of an object in one thread is not useful as an address in another thread. As a result, trying to access that object in another space results in a program crash with an unhandled exception. However, C# provides a mechanism for working with cross-thread process issue.
The BeginInvoke method of the MethodInvoker delegate is used within a thread prcoess to call another process method. These methods are thread-safe and can be used in a multi-threaded environment.
Last night, when a Thread tried to access the Text property of a Label control. I got the following error:
“Cross-Thread operation not valid: Control ‘label3’ accessed from a thread other than the thread that it was created on.”
Add the below quoted codes to perform a cross-thread operation.
1: if (label3.InvokeRequired)
2: {
3: label3.Invoke(new MethodInvoker(delegate{label3.Text = "sample text";});
4: }
Hope this helped.
Thanks 