Закрыть форму при запуске

#c#

#c#

Вопрос:

Я написал приложение, которое проверяет, существуют ли определенные файлы и папки при запуске. Если они этого не делают, я звоню this.Close(); (так как я хочу выйти из полного приложения). Однако я получаю сообщение об ошибке: ObjectDisposedError вкл Application.Run(new MainForm()); . Я думаю , это как — то связано со звонком .Закрыть до успешной загрузки формы. Я выполняю эти проверки запуска из общедоступной функции MainForm() моей MainForm.cs. Это правильно или мне нужно разместить это где-то в другом месте?

Что я пробовал: запустить его с помощью делегата и вызвать:

 public void CloseApplication() {
    if (this.InvokeRequired) {
        this.Invoke(new CloseGameDelegate(CloseApplication));
    } else {
        this.Close();
    }
}
public delegate void CloseGameDelegate();
 

Это по-прежнему выдает мне ту же ошибку.

Использование Application.Exit() : это просто открывает форму.

Комментарии:

1. Сделайте это при загрузке формы, когда форма полностью загружена, проверьте, существуют ли файлы / папки или нет, если нет, то приложение. Выход ()

2. @Pankaj и где это? Это обработчик событий? Я также нашел кое-что о приложении. Запуск, но это не определено..

3. Где находится соответствующий код? Почему вы пытаетесь использовать делегат, когда пользовательский интерфейс даже не запущен?

4. @pankaj это. Загрузка работает для меня. Однако я попробую ответить ниже, так как это несколько чище. panagiotisKanavos Я все еще учусь, и я использовал делегат где-то еще, и это сработало. Я пока не знаю, как работает делегат (предполагаю: при использовании с invoke он выполняет код в том же потоке) и в каких ситуациях я должен их использовать, но я буду.

5. @downvoter не хотите объяснить, почему? Я добавил соответствующий код, в котором, как я надеялся, кто-то сможет помочь (и я думаю, что даже без этого большинство людей поймут).

Ответ №1:

Если вы ищете определенные файлы и даже не хотите запускать свое приложение, если они не найдены, вы можете выполнить проверку в файле «Program.cs».

Не беспокойтесь о создании и открытии MainForm , если файл (ы) не найден:

 static void Main()
{
    ...

    var isFileFound = LookForSomeFiles();

    if (!isFileFound)
    {
        MessageBox.Show("Important files were moved or removed. Please contact support.");
        return;
    }

    Application.Run(new MainForm());
}

private static bool LookForSomeFiles()
{
    // perform your check
}
 

Комментарии:

1. Я собираюсь попробовать это! Вероятно, намного чище и эффективнее, чем загрузка формы, проверка содержимого и последующее закрытие

2. @TaW Это уже было в моем коде, но хороший момент! Не будет полезно, если приложение просто не запускается, не сообщив пользователю почему.