2010-06-18 12 views
0

Tenir compte de la classe suivante:Comment puis-je savoir si un objet peut être Invoke() 'd?

public class Event<T> 
{ 
    public delegate void Handler<t>(t msg); 
    private event Handler<T> E; 

    public void connect(Delegate handler) { 
     E += delegate(T msg) { 
      object target = handler.Target; 

      if (Invokable(target) { 
       target.BeginInvoke(handler, new object[] { msg }); 
      } 
     }; 

    } 

    public void emit(T msg) { 
     if (E != null) { 
      E(msg); 
     } 
    } 

    private static bool Invokable(object o) { 
       // magic 
    } 
} 

Comment puis-je mettre en œuvre Invokable(), et quoi d'autre ai-je besoin de ce code pour compiler? Le seul autre problème que je connais est l'appel target.BeginInvoke, puisque la cible est object.

+0

Quelle est la méthode 'Invokable' censé parler de l'objet' O' (il est une méthode statique, donc il ne peut pas accéder rien d'autre)? –

+0

pourquoi réinventez-vous les délégués? – Andrey

+0

@Tomas: que 'o' soit ou non un formulaire, parce que j'ai besoin de magie de sécurité. –

Répondre

2

Si vous voulez un Invoquer System.Windows.Forms.Control

static bool Invokable(object o) { 
    bool res = false; 
    if(o is System.Windows.Forms.Control) { 
    res = ((System.Windows.Forms.Control)o).InvokeRequired; 
} 
return res; 
}