2010-12-15 25 views
2

HALLO alle,Mehrere Formulare, mehrere Threads, One Process

ich interessiert wäre zu wissen, was die Leute denken, über das Konzept einer ausführbaren Datei, die für den Start drei einzelnen Formen auf ihre eigenen Threads verantwortlich ist. Der Hauptgrund für diesen Ansatz besteht darin, sicherzustellen, dass die Formulare nicht einzeln ausgeführt werden können und dass wir Informationen zwischen den Formularen weitergeben können, ohne IPC zu verwenden.

Ich bin ein wenig unsicher über die idealen Orte, um die Formen in Bezug auf ihre Threads zu erstellen. Ich gehe davon aus, dass es besser wäre, die Formulare in ihrem eigenen Thread zu erstellen und anzuzeigen. Nachdem ich gesagt habe, dass ich unsicher bin, ob das richtig funktioniert. Ich versuchte, es aber einen Querfaden Anruf auf den Formularen eigenen Thread (dh der BeginInvoke Anruf nicht auf dem anderen Thread zurück auf die Showwindow-Methode) funktioniert nicht aufrufen ...

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(); 
     } 
    } 

Ich habe Ich habe viele verschiedene Methoden ausprobiert, um die Methode in einem eigenen Thread aufzurufen, aber keiner von ihnen funktioniert, was zu der Annahme führt, dass es etwas mit dem zugrunde liegenden Threading-System zu tun hat, daher meine Frage.

Vielen Dank!

Chris.

+0

Ich würde alle Formen aus dem gleichen Thread und nicht jeweils einen Thread verwenden. – CodesInChaos

Antwort

0

Vielen Dank für Ihre Kommentare bisher Jungs.

Ein Ansatz, den ich gefunden habe, scheint zu funktionieren, ist Application.Run auf jedem Formular zu verwenden, das ich glaube, startet das Formular auf einem eigenen UIhread. Ich bin nicht sicher über die Auswirkungen dieser, ich werde zurück melden ...

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

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

Windows Forms müssen alle vom Haupt-UI-Thread erstellt werden. Sie könnten jedes Formular einen Worker-Thread erzeugen lassen, um die Arbeit auszuführen, die erledigt werden muss. Die Worker-Threads können ohne IPC miteinander kommunizieren, obwohl Sie sich jetzt an der Position befinden, an der Sie diese Inter-Thread-Kommunikation synchronisieren müssen.