2011-07-19 1 views
0

Je développe une application de chat avec C# et nous utilisons System.Timer.Timer pour obtenir fréquemment des données pour la nouvelle demande et demande de zone.invoke méthode problème avec l'objet formulaire dans C#

Il fonctionne correctement, mais chaque fois que nous créons une nouvelle instance, une exception d'opération croisée se produit.

Ceci est mon code:

frmchat f = new frmchat(); 
MethodInvoker method = new MethodInvoker(delegate() 
{ 
    f.Name = "xyz";f.Show(); 
}); 
if (f.InvokeRequired) 
{ 
    f.Invoke(method); 
} 
else 
{ 
    method(); 
} 

Cela va créer un certain nombre de formes de chat.

Répondre

0

Si vous créez cette forme au gestionnaire d'événements écoulé de cette minuterie puis utilisez this.Invoke à la place, comme:

this.Invoke(new MethodInvoker(() => 
{ 
    frmchat f = new frmchat(); 
    f.Name = "xyz"; 
    f.Show(); 
} 
+0

merci yar mon problème est résolu .. merci beaucoup mush –

+0

@mayur: Vous êtes les bienvenus :) –

1

Je suppose que votre problème est de nouvelles formes ne peuvent être créés sur le thread UI. Essayez d'utiliser un Windows.Forms.Timer si possible. Cela va réinviter l'événement sur le fil correct automatiquement pour vous.

+0

oui si j'utilise window.forms.timer l'amende runnig mais mon ui ne répond pas quand code entre minuterie est en cours d'exécution.quelles pourquoi je l'utilise s'il vous plaît faire quelque chose. –

+1

L'utilisation de Control.Invoke() ne résoudra pas cela. La cible d'invocation ne s'exécutera pas pour la même raison que l'événement Tick du temporisateur ne sera pas exécuté. Résolvez le vrai problème, quel qu'il soit. –

+0

Si vous avez une idée d'ouvrir le formulaire sur l'événement timerelapse alors s'il vous plaît donnez-moi.un moyen. –