2010-12-15 76 views
2

tout le monde HI,formes multiples, plusieurs threads, un processus

Je serais intéressé de savoir ce que les gens pensent au sujet du concept d'un exécutable qui est responsable de trois à partir des formes individuelles sur leurs propres fils. Les principales raisons de cette approche sont de s'assurer que les formulaires ne peuvent pas fonctionner individuellement et que nous puissions transmettre des informations entre les formulaires sans utiliser IPC.

Je ne suis pas sûr des endroits idéaux pour créer les formes en ce qui concerne leurs fils. Je suppose qu'il serait préférable de créer et montrer les formes dans leur propre fil. Cela dit, je ne sais pas si cela fonctionne correctement. Je l'ai essayé mais Invoquer un appel fil croix sur les formes propre fil ne fonctionne pas (c.-à l'appel BeginInvoke ne fait pas revenir à la méthode ShowWindow sur l'autre fil) ...

private void ShowWindow(string serialNumber) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke((MethodInvoker)(delegate() { ShowWindow(serialNumber); })); 
     } 
     else 
     { 
      this.Visible = true; 
      this.WindowState = FormWindowState.Normal; 
      if (serialNumber != string.Empty) 
      { 
       knavManagement.SelectedPage = knpActivate; 
       activatePage.SerialNumber = serialNumber; 
      } 
      Application.DoEvents(); 
     } 
    } 

Je J'ai essayé de nombreuses façons d'invoquer la méthode sur son propre thread mais aucun d'entre eux ne fonctionne, ce qui m'amène à penser que cela peut être quelque chose à voir avec le système de threads sous-jacent, d'où ma question.

Merci!

Chris.

+0

J'utiliserais tous les formes du même fil et pas un fil chacun. – CodesInChaos

Répondre

0

Merci pour vos commentaires jusqu'à présent les gars.

Une approche que j'ai trouvé qui semble fonctionner est d'utiliser Application.Run sur chaque formulaire, qui je crois commence le formulaire sur son propre thread d'interface utilisateur. Je ne suis pas trop sûr des implications de ceci, je rapporterai ...

public void StartManagementConsole() 
    {    
     ThreadStart start = delegate 
     { 
      _managementConsole = new ManagementConsole(); 
      Application.Run(_managementConsole); 
     }; 

     consoleThread = new Thread(start); 
     consoleThread.SetApartmentState(ApartmentState.STA); 
     consoleThread.Start(); 
    } 
2

Les formulaires Windows doivent tous être créés par le thread d'interface utilisateur principal. Vous pouvez demander à chaque formulaire de générer un thread de travail pour effectuer le travail qui doit être effectué. Les threads de travail peuvent communiquer entre eux sans IPC, bien que vous soyez maintenant dans la position où vous devez synchroniser cette communication inter-thread.