Q:

Generic method for updating the cross-wire call error

I have a form where you need to make multiple updates using the method of thread-safe calls to Windows Forms controls
Excerpts of code that do this are repeated several times.  Trying to refactor I created a sort of general method for updating. 
I have a class to register the methods that will be used within the general metdo:
public class ListOfUpdateMethods
{
    public delegate void Metodo();
    private List<Metodo> MetodosPreAtualizacao;
    private List<Metodo> MetodosAtualizacao;

    public ListOfUpdateMethods()
    {
        this. MetodosPreAtualizacao = new List<Metodo>();
        this. MetodosAtualizacao = new List<Metodo>();
    }

    public void AddMetodosPreAtualizacao(Metodo m)
    {
        this. MetodosPreAtualizacao. Add(m);
    }

    public void AddMetodosAtualizacao(Metodo m)
    {
        this. MetodosPreAtualizacao. Add(m);
    }

    public void ExecutaMetodosPreAtualizacao()
    {
        foreach (var m in this. MetodosPreAtualizacao)
            m();
    }

    public void ExecutaMetodosAtualizacao()
    {
        foreach (var m in this. MetodosAtualizacao)
            m();
    }
}

The method:
//General method for updating all Controls as needed 

    private void UpdadeControl(ListOfUpdateMethods list, Control control)
    {
        //Execute required methods before updating the control
        list. ExecutaMetodosPreAtualizacao();

        if (control. InvokeRequired)
        {
            var up = new Updates(UpdadeControl);
            Invoke(up, new object[] { list, control });
        }
        else
        {
            //Execute methods needed to update control
            list. ExecutaMetodosAtualizacao();

        }
    }

When I want to update some control, what I do is:
ListOfUpdateMethods VariavelDeInstancia = new ListOfUpdateMethods();
UpdateStopXRayTimer. AddMetodosAtualizacao(MetodoComInstrucoesQUeAtualizaOControle);
UpdadeControl(VariavelDeInstancia, ControleASerAtualizado);

However, when the MetodoComInstrucoesQUeAtualizaOControle is called, an access exception occurs for theadins crossed.  That is, the method does not run on the main treading. 
An example of what you would have within this method would be:
void MetodoComInstrucoesQUeAtualizaOControle()
{
   ControleASerAtualizado = "Text";
}

Does anyone have any tips on how to solve the described problem? 

A:

Because your code have bugs.  Hint at below. 
public class ListOfUpdateMethods
{
    public delegate void Metodo();
    private List<Metodo> MetodosPreAtualizacao;
    private List<Metodo> MetodosAtualizacao;

    public ListOfUpdateMethods()
    {
        this. MetodosPreAtualizacao = new List<Metodo>();
        this. MetodosAtualizacao = new List<Metodo>();
    }

    public void AddMetodosPreAtualizacao(Metodo m)
    {
        this. MetodosPreAtualizacao. Add(m);
    }

    public void AddMetodosAtualizacao(Metodo m)
    {
       // change this code. 
       // this. MetodosPreAtualizacao. Add(m);
       this. MetodosAtualizacao. Add(m);
    }

    public void ExecutaMetodosPreAtualizacao()
    {
        foreach (var m in this. MetodosPreAtualizacao)
            m();
    }

    public void ExecutaMetodosAtualizacao()
    {
        foreach (var m in this. MetodosAtualizacao)
            m();
    }
}

I suggest you can change your UpdadeControl method to below. 
private void UpdadeControl(ListOfUpdateMethods list, Control control)
{
    // this method can't added the UI operate.  
    // If you added the UI operate delegate.  It will throw the exception. 
    list. ExecutaMetodosPreAtualizacao();

    if (control. InvokeRequired)
    {
        // you can use Action delegate.  Action delegate is so good. 
        var action = new Action<ListOfUpdateMethods, Control>(UpdadeControl);
        control. Invoke(action, new object[] { list, control });
    }
    else
    {
        //Execute methods needed to update control
        list. ExecutaMetodosAtualizacao();

    }
}

