BeginInvoke non centra con il riuscire a fare in modo che solo qualcuno tra una collezione di controlli riceva un determinato messaggio.
Magari lo dovrai anche usare, ma non per quel motivo.
Usando uno UnityInjection con magari anche un EventBus, il tuo problema diventerebbe banale.
Alternativamente eleggi un oggetto ad essere possessore di un evento.
Ad esempio la form/window che contiene tutto.
Dota la classe anche di un metodo per invocare l'evento.
Codice:
public event Action<string> Gotcha.
public void GotchaFire(string str)
{
if (Gotcha!=null)
Gotcha(str);
}
All'interno di ciascun controllo di quelli interessati vai a cercare la finestra
(questo andare a cercare e' proprio uno delle cose che la unity injection e l'EventBus ti permetterebbero di evitare)
E sottoscriviti all'evento, facendogli fare qualcosa.
Codice:
var formContainer = qualcosa;
formContainer.Gotcha += (str) =>
{
if (str=="EDirettoAMe")
FaccioQualcosa();
}
Da dove dovrai segnalare, semplicemente chiama il metodo della finestra.
Codice:
var formContainer = qualcosa;
formContainer.GotchaFire("messaggioDaMandare");
per evitare problemi di sottoscrizioni non rilasciate, aggiungi alla chiusura della form (evento Closed) il codice relativo a cancellare TUTTE le sottoscrizioni fatte da qualunque controllo.
Gotcha = null;