c # - закрытие WPF из диалога без кнопки - PullRequest
0 голосов
/ 16 января 2019
SecondWindow secdWin = new SecondWindow();
secdWin.ShowDialog();

Приведенный выше код взят из моего MainWindow.xaml.cs

Новое окно появляется и делает то, что должно делать, а затем я пытаюсь закрыть его изнутри.

Это из моего SecondWindow.xaml.cs

public partial class SecondWindow : Window
{
    public SecondWindow()
    {
        InitializeComponent();
        Task initTask = new Task(() => Init());
        initTask.Start();
    }

    private void Init()
    {
        server = new ServerReply();
        //.. doing stuff with the server.
        server.Reply = response.Content;
        //I want to close the SecondWindow here.
    }
}

Я пытался:

var w = Application.Current.Windows[0];
w.Close();

Не работает, я тоже попробовал:

this.Close();

Но что бы я ни делал, все, что я получаю, это:

Exception thrown: 'System.InvalidOperationException' in WindowsBase.dll

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Выполнить и await Задача в async Загруженном обработчике событий:

public SecondWindow()
{
    InitializeComponent();
    Loaded += WindowLoaded;
}

private async void WindowLoaded(object sender, RoutedEventArgs e)
{
    await Task.Run(() => Init());
    Close();
}
0 голосов
/ 16 января 2019

Вы должны использовать Dispatcher в вашем методе Init. Например, вот так:

Application.Current.Dispatcher.Invoke(() => this.Close());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...