2009-07-02 6 views
0

Imaginez le code ci-dessous. Seule la première fenêtre apparaît en haut, toutes les fenêtres suivantes ne peuvent pas et ne peuvent pas être focalisées par programme pour une raison quelconque (elles apparaissent en arrière-plan). Une idée de comment contourner cela? BTW, les méthodes/propriétés statiques ne sont pas autorisées et il n'y a aucune propriété globale.Pourquoi seule la première fenêtre affichée peut-elle être mise au point?

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     Thread t1 = new Thread(CreateForm); 
     t1.SetApartmentState(ApartmentState.STA); 
     t1.Start(); 
     t1.Join(); 

     t1 = new Thread(CreateForm); 
     t1.SetApartmentState(ApartmentState.STA); 
     t1.Start(); 
     t1.Join(); 
    } 

    private static void CreateForm() 
    { 
     using (Form f = new Form()) 
     { 
      System.Windows.Forms.Timer t = new System.Windows.Forms.Timer 
      { 
       Enabled = true, 
       Interval = 2000 
      }; 
      t.Tick += (s, e) => { f.Close(); t.Enabled = false; }; 

      f.TopMost = true; 
      Application.Run(f); 
     } 
    } 
+0

Comment pouvez-vous avoir deux éléments en tant que «TopMost»? Imaginez une file d'attente au guichet. Si vous êtes la première personne à faire la queue, personne d'autre ne peut prendre la première place. Si quelqu'un prend la première place, vous perdez automatiquement votre première place. Pourriez-vous nous dire ce que vous essayez d'accomplir? – SolutionYogi

+0

En raison de Join() les fenêtres sont créées et affichées dans la séquence, pas en même temps. –

Répondre

0

Hans solved the problem Passant: il suffit d'utiliser SetForegroundWindow() (P/Invoke). Shees, je devrais avoir si de cela :-)

Questions connexes