Jak prawidłowo utworzyć okno WPF, z klasy startowej

Jak prawidłowo utworzyć okno WPF, z klasy startowej
ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Witam, mam taki oto kod:

Kopiuj
 [STAThread]
public static void Main(string[] args)
{
if (File.Exists(path))
{
window1.Show()
}else
{
window2.Show()
}
System.Windows.Threading.Dispatcher.Run();
}

Tą metodę mam w klasie, którą nazwałem "start", i za jej pomocą uruchamiam te okno, które ma się pojawić. Sęk w tym, że potrzebuje przełączać się między tymi oknami też po uruchomieniu jednego z nich. W tym celu robię coś takiego:
np. W window1:

Kopiuj
metoda(po kliknięciu przycisku){
this.Close
window2.Show()}

No właśnie... I ten kod działa, chociaż nie powinien (Close();) powinno zamknąć mi okno, więc dalszy kod powinien się nie wykonać. Jednak wszystko działa "jak należy". Więc gdzie leży problem ? A no w tym, że klasa okna window1, nigdy nie zostaje zniszczona. Przełączając się np. 10x między jednym i drugim oknem te pozostają w pamięci (sprawdzałem, czy destruktor po zamknięciu jest wywoływany, ale niestety nie jest), a tak być nie powinno... Uruchamiając bezpośrednio okno window1 (ustawione jako element startowy) wszystko działa jak należy. Tak więc mniemam, że źle "powołuje" okno do życia w mojej metodzie startowej.

Pomoże ktoś ? Siedzę nad tym już trochę i nie mogę sobie poradzić...
Pozdrawiam ;)

AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 308
0

wydaje mi się że tak powinno być, zamykasz a nie niszczysz. Chcesz zniszczyć, użyj Dispose()

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Dodam, że piszę w WPF.

@.Al sęk w tym, że jak utworzysz sobie w VS pusty projket WPF i wpiszesz taki kod:

Kopiuj
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        ~MainWindow()
        {
            MessageBox.Show("Destruktor MainWindow zgłasza się!");
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Window1 window1 = new Window1();
            window1.Show();
            this.Close();
        }
    }

To destruktor wykona się, a w moim powyższym przykładzie (uruchamiane okna z pod innej klasy) już nie.

EDIT:
A teraz ustaw element startowy na klasę np. Start, a w niej wpisz:

Kopiuj
private static void Main(string[] args)
        {
               MainWindow mainWindow = new MainWindow();
               mainWindow.Show()
        }

Efekt: "MainWindow" nie ulegnie zniszczeniu.

AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 308
0

edit: dobra, źle myślałem, sprawdziłem

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Dobra mój błąd... W gąszczu kodu mojego programu miałem zakopane:

Kopiuj
e.Cancel = true;

I to tutaj leżał problem z this.Close();

Niemniej jednak, dzięki za zainteresowanie ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.