Hauptfenster sperren



  • Hallo zusammen,

    ich habe ein Fenster mit einem Button. Wird dieser gedrückt, dann starte ich eine einen Subprocess in einem extra Fenster. Diese bleibt solange offen, bis dort Enter gedrückt wurde.

    Wie kann ich mein Hauptfenster nun solange sperren, bis im Fenster ENTER gedrückt wurde? Es ist kein Dialog oder so ähnlich was ich aufmache, sondern ich starte so ein ProcessStartInfo per Process.Start.

    Jemand einen Tipp?

    Gruß



  • Enabled = false;
    


  • Hallo Th69,

    damit habe ich es probiert, allerdings kann ich dennoch im Hauptfenster auf den Buttons rumklicken, wodurch die entsprechenden Aktionen ausgelöst werden, sobald ich das Fenster schließe. Sprich wenn der User da dreimal den start Button klickt, geht Fenster auf, läuft durch, muss mit Enter beendet werden, und geht wieder auf ... und so weiter.

    Ich hätte gedacht Enabled = false wirft die Ereignisse weg, aber scheinbar nicht. Geht das irgendwie zu verhindern?



  • Du meinst, du drückst, während der Button disabled ist, mehrfach drauf, und wenn du die Form (und den Button) wieder aktivierst (Enabled = true), dann wird wiederum die Button-Click Ereignismethode aufgerufen?

    Hast du denn "Enabled = false" gleich ganz am Anfang der Ereignismethode stehen?

    Und wie wartest du denn auf das Ende des externen Prozesses? Ich hoffe mal passiv mittels des Exited-Ereignisses?



  • Hallo Th69,

    sorry das ich mich jetzt erst melde, ich war die Tage bissl eingebunden.

    Du meinst, du drückst, während der Button disabled ist, mehrfach drauf, und wenn du die Form (und den Button) wieder aktivierst (Enabled = true), dann wird wiederum die Button-Click Ereignismethode aufgerufen?

    Genau. So meine ich das.

    Hier mal in knapp wie ich es mache:

    private void FlashImageButton_Click(object sender, RoutedEventArgs e)
            {
    
                IsEnabled = false;
    
                //check some fields ...
    
                if( .... )
                {
                    string question =  ...
                    string title = ... 
    
                    System.Windows.Forms.DialogResult dialogResult = System.Windows.Forms.MessageBox.Show(question, title,
                                                                                                          System.Windows.Forms.MessageBoxButtons.YesNo);
                    switch(dialogResult){
                        case System.Windows.Forms.DialogResult.Yes:                       
    
                            //do the flashing stuff
    
                            break;
                        case System.Windows.Forms.DialogResult.No:
                            break;
    
                    }
                }
    
                IsEnabled = true;
    
            }
    

    Ich sehe, dass im Hintergrund die Button deaktiviert werden, aber wie gesagt, die Events werden nach dem aktivieren verarbeitet.

    Gruß und so ...



  • Achso,

    ausführen tue ich den Prozess so:

    try
                {
                    // start the process with the info we specified.
                    // Call WaitForExit and then the using-statement will close.
                    using (Process exeProcess = Process.Start(process))
                    {
                        exeProcess.WaitForExit();
                    }
    
                    return 0;
                }
                catch (SystemException e)
                {
                    Console.WriteLine("An ERROR have occurred: " + e.Message + ". Exception thrown by: " + e.Source);
                }
    

    Richtig so?


Log in to reply