Показать форму, когда другая форма закрыта - PullRequest
0 голосов
/ 01 мая 2018

При нажатии кнопки (это находится в основной форме), я показываю (вторую) форму, которая выполняет некоторый анализ (распаковка, извлечение, получение информации и т. Д.) Файла архива. После завершения этого процесса я закрываю вторую (синтаксический анализ) форму и показываю другую (третью) форму, которая содержит разобранную информацию из архива.

Обратный вызов клика выглядит так:

private void ParseInputBackupButton_Click(object sender, EventArgs e)
{
    Form PBF = new ParseBackupForm();
    Form CBF = new CreateBackupForm();
    PBF.FormClosed += delegate
    {
        CBF.ShowDialog();
    };
    PBF.ShowDialog();
}

и вторая форма:

private void ParseBackupForm_Load(object sender, EventArgs e)
{
    new Thread((ThreadStart)delegate
    {

        // parse and update form

        this.Invoke((MethodInvoker)delegate
        {
            this.Close();
        });

    }).Start();
}

Проблема в том, что когда появляется третья форма (CreateBackupForm), вторая форма (ParseBackupForm) не закрывается. Они оба появляются. Если я не покажу третью форму, вторая форма закроется.

screenshot of the forms

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Поскольку вы звоните ShowDialog в обоих окнах, не могли бы вы просто вызывать их одно за другим?

т.е.

PBF.ShowDialog();
CBF.ShowDialog();

Второй вызов не будет выполнен, пока не закроется диалоговое окно PBG.

Редактировать. Причина, по которой вторая форма не закрывается, заключается в том, что вы подписываетесь на событие, вызванное формой при ее закрытии, а затем внутри этого делегата, вызывающего ShowDialog, который блокирует фактическое закрытие формы.

0 голосов
/ 01 мая 2018

Вы могли бы BeginInvoke вызвать CBF.ShowDialog();, таким образом не блокируя завершение метода обратного вызова FormClosed и закрытие формы PBF.

0 голосов
/ 01 мая 2018

Насколько я помню, .ShowDialog() - это метод блокировки, поэтому не помешает другой форме завершить свой метод close, пока эта форма также не будет закрыта?

Вы уверены, что можете использовать .Show(), чтобы просто сделать форму видимой без блокировки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...