Saturday, July 27, 2013

Delegates, Invoke, InvokeRequired


Question: What is InvokeRequired? Why this word is so difficult and what is it do? 

Answer: InvokeRequired is a property of a control which tells whether or not you can safely access the control. It is a boolean to check if you are on the UI thread before you try to update a form or control from a worker thread. 

If the property is True, then an invocation is required to access the control as the caller is on different thread than the one that owns the control's handle.

The invocation is performed by calling the control's Invoke or BeginInvoke method. 
You create a delegate, which is an object that contains the reference to a method. Then we pass this delegate to Invoke or BeginInvoke method which essentially call the reference method again but on thread that owns the control's handle.

Summary:
InvokeRequired asks 'Am I on the right thread?', if so carry on, else I need a delegate.

I got help and understanding of this from: 

Accessing Controls from Worker Threads


HTH.


No comments: