Monday, May 4, 2009

Action Delegate in .Net

Something that comes with the .Net 2.0 and above is the Action<T> delegate; this delegate can be used when ever a delegate is needed that takes in no argument or just one argument etc…Especially in GUI application it is cumbersome that you need to create delegates here and there even for simple functions, but with this new delegate defined in the System namespace you no longer need to do that, Imagine the method Show, below needs is called from a different thread then the UI thread, because you are updating UI controls created in the UI created you would need to switch back to the UI thread in order to do this (the actual reason for this?. some goggling around would do J); the code could be written like this.

private void Show(int i, string j) {

if (InvokeRequired) {

Invoke(new Action<int,string>(Show),new object[]{i,j});

return;

}

button1.Enabled = true;;

}

Notice how the Action delegate is used, as it is a generic type, the required type could be passed in. There is also an overload that does not take any parameter that can be used as follows

Invoke (new Action(Show), null);

It is also interesting to note that the Action delegate can take up to 4 generic types as parameters as shown below

Invoke (new Action(Show), new object[]{I,j,k,l});

Note: the Invoke method is a member of the Control class, and does not have any relation to the Action delegate, the Invoke method here is show just for the sake of using it with the Action delegate.