Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3357956
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T02:41:41+00:00 2026-05-18T02:41:41+00:00

When calling a Multicast Delegate one should use GetInvocationList to call one by one

  • 0

When calling a Multicast Delegate one should use GetInvocationList to call one by one the delegate:

public void IterateAll()
{
    if( _doExecute != null )
    {
        foreach( ExecuteCallback doSingleExecute in _doExecute.GetInvocationList() )
        {
            try
            {
                doSingleExecute();
            }
            catch
            {
                // This delegate threw an exception
            }
        }
    }
}

Is there a way to genericize this so as to go back to one single call by wrapping this iteration so as to hide it and so that one could call only once again the whole multicast delegate ? This would be closer to the intentional level.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T02:41:41+00:00Added an answer on May 18, 2026 at 2:41 am

    You could do something like this:

    public static void CallAllAndCatch(this Action self)
    {
        if (self == null)
            return;
    
        foreach (Action i in self.GetInvocationList()) {
            try { i(); }
            catch { }
        }
    }
    

    Note that you can use generics if you find yourself doing this a lot with e.g. EventHandler<T>, but you cannot do this generically for any delegate of any type since delegate types cannot be assigned between each other, even if they are compatible, and there is no mechanism when defining a generic method to restrict a specific generic parameter to be a delegate with a specific signature. (I think delegates with identical signatures are considered compatible types starting with .NET 4.)

    For the EventHandler<T> approach:

    public static void CallAllAndCatch(this EventHandler<T> self, object sender, T args)
        where T : EventArgs
    {
        if (self == null)
            return;
    
        foreach (EventHandler<T> i in self.GetInvocationList()) {
            try { i(sender, args); }
            catch { }
        }
    }
    

    If you don’t mind throwing performance and compile-time type checking down the tube, you can do this, which will work with any delegate type:

    public static void CallAllAndCatch(this Delegate self, params object[] args)
        where T : EventArgs
    {
        if (self == null)
            return;
    
        foreach (Delegate i in self.GetInvocationList()) {
            try { i.DynamicInvoke(args); }
            catch (MemberAccessException) { throw; } // A type of something in args isn't compatible with the delegate signature.
            catch (TargetException) { throw; } // The delegate itself is invalid.
            catch { } // Catch everything else.
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

After calling the redirect function header, should I call exit or not? <?php //
Calling TextView.setTextSize() is working abnormally. Right after the call to setTextSize if we get
How can i see HttpWebRequest object as string before calling GetResponse method? I want
Calling instance method cancel on an NSURLConnection most often don't cancel the connection at
Calling the javascript gurus out there. Basically my question is regarding how you structure
Calling the UDF like so: SELECT product_name, SUM(quantity) AS SumQty, SUM(face_value) AS SumFaceValue, SUM(net_cost)AS
Does calling more functions have any kind of noticeable effect of performance, or is
When calling a Stored Procedure with no arguments and no output is there any
im calling a webservice with variable response times. I want to be able to
Iam calling a PHP custom function with different parameters which returns a different arrays

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.