Prevent recursive calls in WinForm event handlers
You can improve the EventHelper by reusing the sender argument so that you have only a single instance of the helper. The helper maintains a HashSet&lt;object&gt; that stores senders that are currently handled. This will allow you to use the return value of the Add method which is false if the sender already has been added an thus acts like your skip variable. Finally you Remove the sender from the set as if you were setting skip to false.

public class EventHelper
{
    private readonly ISet&lt;object&gt; _senders = new HashSet&lt;object&gt;();

    public void ExecuteOnce(object sender, Action action)
    {
        if (!_senders.Add(sender))
        {
            return;
        }

        action();
        _senders.Remove(sender);
    }
}


You would now call it with one more parameter:

eventHelper.ExecuteOnce(s, () =&gt;




As far as the code is concerned you should always use {} and perhaps parameter names longer then a single letter f.