Timer et accès au Form

jlf_2007 Messages postés 6 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 17 juillet 2007 - 12 juil. 2007 à 15:35
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 12 juil. 2007 à 16:50
Bonjour,

      j'ai déclaré un timer qui fonctionne a priori correctement (la fonction souhaité est appelée). Par contre, une fois que je suis dans cette fonction, je n'arrive pas à accéder aux contrôles du Form en question. Dans mon cas, je souhaite fermer automatiquement une fenêtre.

Etapes
   1) dans le main.cs, je fais "Form About= new xxx.AboutBox1();" et "About.Show();"
   2) dans le fichier AboutBox1.cs, je déclare mon timer qui appellera la fonction "CloseBox" elle-aussi dans AboutBox1.cs
   3) dans la fonction "CloseBox", là, je suis perdu...

private
void CloseBox(
object state)
{

   this.Close();
}
J'ai le message suivant: "Opération inter-threads non valide : le contrôle 'AboutBox1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

Je comprends bien que l'environnement d'appel n'est pas le même, mais je n'arrive pas à trouver comment faire référence à un contrôle/form/objet quelque soit l'endroit du code...

Un p'tit coup de main serait grandement apprécié

Cordialement,

      JLF

3 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
12 juil. 2007 à 16:00
Essaie comme ça :

if

(
InvokeRequired)

Invoke(
new
MethodInvoker(
Close));
else
Close();

Un peu plus d'explication ici :

http://www.csharpfr.com/codes/EXEMPLE-UTILISATION-CONTROL-INVOKE_29068.aspx

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
jlf_2007 Messages postés 6 Date d'inscription mercredi 20 juin 2007 Statut Membre Dernière intervention 17 juillet 2007
12 juil. 2007 à 16:29
SharpMao : Merci, cette commande ferme bien la fenêtre souhaitée.

Mais cela ne résoud pas complètement mon souci : à partir du code de "AboutBox1.cs", je souhaite accéder à tous les contrôles de toutes mes fenêtres.
Par exemple, dans "AboutBox1.cs", je souhaite griser un bouton de la fenêtre "Main". Comment fait-on cela ?

Merci d'avance :)
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
12 juil. 2007 à 16:50
Alors essaie ceci

private
void
CloseBox(
object
state)
{

if (
InvokeRequired)

Invoke(
new
TimerCallback(
CloseBox),
new
object[] {
state });

else
{

// Fais tout ce que tu dois faire ici
}
}

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Rejoignez-nous