J'ai 2 classes A et B, où ils appartiennent au même espace de noms, mais réside dans des fichiers séparés à savoir les a.cs et b.cs, où la classe B est essentiellement une aide enroulant un appel de service Web comme suit:Comment utiliser délégué pour effectuer un rappel entre l'appelant et la classe d'assistance du service Web?
public class A
{
public A() // constructor
{
protected static B b = new B();
}
private void processResult1(string result)
{
// come here when result is successful
}
private void processResult2(string result)
{
// come here when result is failed
}
static void main()
{
b.DoJobHelper(...);
}
}
public class B
{
private com.nowhere.somewebservice ws;
public B()
{
this.ws = new com.nowhere.somewebservice();
ws.JobCompleted += new JobCompletedEventHandler(OnCompleted);
}
void OnCompleted(object sender, JobCompletedEventArgs e)
{
string s = e.Result;
Guid taskID = (Guid)e.UserState;
switch (s)
{
case "Success":
// Call processResult1();
break;
case "Failed":
// Call processResult2();
break;
default: break;
}
}
public void DoJobHelper()
{
Object userState = Guid.NewGuid();
ws.DoJob(..., userState);
}
}
(1) J'ai vu des textes sur le net sur l'utilisation des délégués pour les rappels, mais je n'ai pas appliqué cela à mon cas. Tout ce que je veux faire est d'appeler la méthode processResult()
appropriée lors de l'événement OnCompleted()
, mais dunno comment et où déclarer le délégué:
public delegate void CallBack(string s);
(2) Il y a un objet émetteur passé pour OnCompleted()
mais jamais utilisé, ai-je manqué quelque chose là-bas? Ou comment puis-je faire bon usage de sender
?
Toute aide appréciée.
Puisqu'il semble que votre question a été répondue, pourquoi ne pas la marquer comme réponse? – Noctis