OVH Cloud OVH Cloud

erreur sur 1 fonction appelée de façon asynchrone

4 réponses
Avatar
cui
Bonjour,

J'essaie d'envoyer 1 mail avec une fonction asynchrone sur 1 levée
d'exception

voici le code que j'ai pu tiré de différents exemples:

private delegate string AsynchronousMail(string t) ; //EventArgs e) ;

private void sendMailException(EventArgs e) {



AsynchronousMail mail = new AsynchronousMail( mailFct) ;

IAsyncResult iAr ;

iAr = mail.BeginInvoke("ch", CallbackMethod, iAr) ;


}

private string mailFct(string t) {

// CODE POUR ENVOYER LE MAIL

return null ;

}

static void CallbackMethod(IAsyncResult ar) {

// CODE EN FONCTION de ar...

}



Mais, à chaque fois, le compilateur m'indique une erreur sur la ligne iAr =
mail.BeginInvoke("ch", CallbackMethod, iAr) ;

en me précisant le message d'erreur suivant: la méthode
CallbackMethod(Systel.IAsyncResult) est référencée sans parenthéses.



Je ne vois pas d'ou ça vient. Si je mets dans cette instruction
BeginInvoke("ch", null, null) c'est OK.

J'ai essayé de mettre la fonction en tant que static et non static.



Merci pour votre aide.



Cui.

4 réponses

Avatar
Paul Bacelar
Je ne connais aucune class AsynchronousMail et Google non plus.

Sans la signature de votre "BeginInvoke", c'est dur de vous aider mais je
n'en connais aucun qui prend une chaîne de caractère en premier paramètre,
qui soit une méthode d'un delegate et qui prenne un nom de fonction en
premier deuxième paramètre au lieu du delegate en première position et qui
prend en troisième paramètre une référence non initialisée.

En résumé, c'est du n'importe quoi.

Donnez nous des informations sur les classes et les assemblies utilisées car
vous semblez complètement à la dérive.



P.S.: tester avec null comme paramètre ne rime à rien car null est castable
en n'import quel type class et donc passe à travers toutes les vérifications
de types de la compilation. Vous faites entrer des ronds dans des carrés.
--
Paul Bacelar


"cui" wrote in message
news:417eb16d$0$297$
Bonjour,

J'essaie d'envoyer 1 mail avec une fonction asynchrone sur 1 levée
d'exception

voici le code que j'ai pu tiré de différents exemples:

private delegate string AsynchronousMail(string t) ; //EventArgs e) ;

private void sendMailException(EventArgs e) {



AsynchronousMail mail = new AsynchronousMail( mailFct) ;

IAsyncResult iAr ;

iAr = mail.BeginInvoke("ch", CallbackMethod, iAr) ;


}

private string mailFct(string t) {

// CODE POUR ENVOYER LE MAIL

return null ;

}

static void CallbackMethod(IAsyncResult ar) {

// CODE EN FONCTION de ar...

}



Mais, à chaque fois, le compilateur m'indique une erreur sur la ligne iAr


> mail.BeginInvoke("ch", CallbackMethod, iAr) ;

en me précisant le message d'erreur suivant: la méthode
CallbackMethod(Systel.IAsyncResult) est référencée sans parenthéses.



Je ne vois pas d'ou ça vient. Si je mets dans cette instruction
BeginInvoke("ch", null, null) c'est OK.

J'ai essayé de mettre la fonction en tant que static et non static.



Merci pour votre aide.



Cui.




Avatar
Seb
IAsyncResult iAr = mail.BeginInvoke("ch", new
AsyncCallback(CallbackMethod), mail)

C'est peut être mieux

seb [MVP C#]

"cui" a écrit dans le message de news:
417eb16d$0$297$
Bonjour,

J'essaie d'envoyer 1 mail avec une fonction asynchrone sur 1 levée
d'exception

voici le code que j'ai pu tiré de différents exemples:

private delegate string AsynchronousMail(string t) ; //EventArgs e) ;

private void sendMailException(EventArgs e) {



AsynchronousMail mail = new AsynchronousMail( mailFct) ;

IAsyncResult iAr ;

iAr = mail.BeginInvoke("ch", CallbackMethod, iAr) ;


}

private string mailFct(string t) {

// CODE POUR ENVOYER LE MAIL

return null ;

}

static void CallbackMethod(IAsyncResult ar) {

// CODE EN FONCTION de ar...

}



Mais, à chaque fois, le compilateur m'indique une erreur sur la ligne iAr


> mail.BeginInvoke("ch", CallbackMethod, iAr) ;

en me précisant le message d'erreur suivant: la méthode
CallbackMethod(Systel.IAsyncResult) est référencée sans parenthéses.



Je ne vois pas d'ou ça vient. Si je mets dans cette instruction
BeginInvoke("ch", null, null) c'est OK.

J'ai essayé de mettre la fonction en tant que static et non static.



Merci pour votre aide.



Cui.




Avatar
Frederic Melantois
Bonjour,

Prenez juste cette ligne :

private delegate string AsynchronousMail(string t);

regardez ce qui est généré en IL avec Ildasm

vous verrez alors que la méthode BeginInvoke y est définie automatiquement
(Le compilateur c# produit le BeginInvoke et le EndInvoke, le compilateur VB
aussi;-) mais qu'elle attend une référence de type AsynCallBack et non une
méthode.

Le code devrait donc être plus celui-ci :

public delegate string AsynchronousMail(string t)
...
void MethodeSynchrone()
{
AsynchronousMail mail = new AsynchronousMail( mailFct) ;

AsynchCallback mycallback = new AsyncCallback(votremethode);

IAsyncResult iAr = mail.BeginInvoke("ch", mycallback , iAr) ;
...
}

Frédéric Mélantois

"cui" a écrit dans le message de
news:417eb16d$0$297$
Bonjour,

J'essaie d'envoyer 1 mail avec une fonction asynchrone sur 1 levée
d'exception

voici le code que j'ai pu tiré de différents exemples:

private delegate string AsynchronousMail(string t) ; //EventArgs e) ;

private void sendMailException(EventArgs e) {



AsynchronousMail mail = new AsynchronousMail( mailFct) ;

IAsyncResult iAr ;

iAr = mail.BeginInvoke("ch", CallbackMethod, iAr) ;


}

private string mailFct(string t) {

// CODE POUR ENVOYER LE MAIL

return null ;

}

static void CallbackMethod(IAsyncResult ar) {

// CODE EN FONCTION de ar...

}



Mais, à chaque fois, le compilateur m'indique une erreur sur la ligne iAr


> mail.BeginInvoke("ch", CallbackMethod, iAr) ;

en me précisant le message d'erreur suivant: la méthode
CallbackMethod(Systel.IAsyncResult) est référencée sans parenthéses.



Je ne vois pas d'ou ça vient. Si je mets dans cette instruction
BeginInvoke("ch", null, null) c'est OK.

J'ai essayé de mettre la fonction en tant que static et non static.



Merci pour votre aide.



Cui.




Avatar
Frederic Melantois
oups... désolé j'ai répondu trop vite ;-)

<code precedent>

IAsyncResult iAr = mail.BeginInvoke("ch", mycallback , iAr) ;

</code precedent>

Bien sûr, le dernier membre iAr n'a pas de sens... Mettez "mail" ou null, ça
dépend ce que vous souhaitez faire.

Frederic

"Frederic Melantois" a écrit dans le message de
news:clth1v$p8a$
Bonjour,

Prenez juste cette ligne :

private delegate string AsynchronousMail(string t);

regardez ce qui est généré en IL avec Ildasm

vous verrez alors que la méthode BeginInvoke y est définie automatiquement
(Le compilateur c# produit le BeginInvoke et le EndInvoke, le compilateur


VB
aussi;-) mais qu'elle attend une référence de type AsynCallBack et non une
méthode.

Le code devrait donc être plus celui-ci :

public delegate string AsynchronousMail(string t)
...
void MethodeSynchrone()
{
AsynchronousMail mail = new AsynchronousMail( mailFct) ;

AsynchCallback mycallback = new AsyncCallback(votremethode);

IAsyncResult iAr = mail.BeginInvoke("ch", mycallback , iAr) ;
...
}

Frédéric Mélantois

"cui" a écrit dans le message de
news:417eb16d$0$297$
> Bonjour,
>
> J'essaie d'envoyer 1 mail avec une fonction asynchrone sur 1 levée
> d'exception
>
> voici le code que j'ai pu tiré de différents exemples:
>
> private delegate string AsynchronousMail(string t) ; //EventArgs e) ;
>
> private void sendMailException(EventArgs e) {
>
>
>
> AsynchronousMail mail = new AsynchronousMail( mailFct) ;
>
> IAsyncResult iAr ;
>
> iAr = mail.BeginInvoke("ch", CallbackMethod, iAr) ;
>
>
> }
>
> private string mailFct(string t) {
>
> // CODE POUR ENVOYER LE MAIL
>
> return null ;
>
> }
>
> static void CallbackMethod(IAsyncResult ar) {
>
> // CODE EN FONCTION de ar...
>
> }
>
>
>
> Mais, à chaque fois, le compilateur m'indique une erreur sur la ligne


iAr
> > mail.BeginInvoke("ch", CallbackMethod, iAr) ;
>
> en me précisant le message d'erreur suivant: la méthode
> CallbackMethod(Systel.IAsyncResult) est référencée sans parenthéses.
>
>
>
> Je ne vois pas d'ou ça vient. Si je mets dans cette instruction
> BeginInvoke("ch", null, null) c'est OK.
>
> J'ai essayé de mettre la fonction en tant que static et non static.
>
>
>
> Merci pour votre aide.
>
>
>
> Cui.
>
>