2010-06-23 9 views
0

J'ai de sérieux problèmes avec une application WinForm sur laquelle je travaille.
Actuellement, j'utilise Form1.ShowDialog(); pour afficher un formulaire. Ce code est contenu dans un agent d'arrière-plan qui recherche les modifications dans une base de données. Utilisation de Form1.ShowDialog(); autorise uniquement l'ouverture d'un formulaire à la fois, même s'il y a plusieurs changements dans la base de données. Ce que je veux faire, c'est que plusieurs formulaires s'ouvrent en même temps s'il y a plus d'un changement dans ma base de données.Affichage de plusieurs instances de même forme?

Lorsque j'utilise Form1.Show() ;, l'application explose. Pour une raison quelconque, la méthode Show() fait que les formulaires ne s'affichent pas correctement (tous les éléments du formulaire sont manquants).

Y at-il quelque chose que je peux faire pour que mon code fonctionne comme je le veux?

Edit: voici un extrait de code

//result is a linq result 
foreach (var row in result) 
{ 
Form1 Form = new Form1(); 
Form.ShowDialog(); 
} 
+2

Affichez la portion de code correspondante pour que je puisse l'analyser, s'il vous plaît. –

+0

... et aussi quelques détails sur la façon dont l'application "explose" (messages d'exception et autres). –

+0

Le code a été ajouté, Lorsque show(); est utilisée, la boucle foreach continue à boucler (même s'il n'y a qu'une seule ligne dans le résultat) et montre les formes qui manquent à ses éléments. – sooprise

Répondre

1

Après un premier coup d'oeil, je peux vous dire ceci:

  • showDialog ne peut pas travailler comme vous avez l'intention: cette méthode très rend le propriétaire inactif jusqu'à ce que le dialogue soit fermé. Dans votre cas, la boucle s'arrêtera au premier showdialog, puis reprendra lorsque vous fermerez le formulaire, en ouvrira un nouveau et ainsi de suite jusqu'à ce que la boucle soit terminée.
  • En ce qui concerne le problème "show", en créant des formulaires vides, j'ai besoin de plus d'informations. Le reste du code et les exceptions que vous obtenez.
1

Deux points du haut de ma tête:

1) Pour ouvrir plus d'une forme, l'utilisation non modale (méthode modale) (je pense que le spectacle () méthode). voir par exemple http://msdn.microsoft.com/en-us/library/39wcs2dh.aspx

2) Je ne suis pas sûr que vous pouvez appeler une méthode liée à l'interface utilisateur à partir d'un thread non UI. Vous pouvez envoyer un événement à votre thread d'interface utilisateur à partir du thread de travail et le thread de l'interface utilisateur appellera la méthode show.

Questions connexes