#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 Это уже было в моем коде, но хороший момент! Не будет полезно, если приложение просто не запускается, не сообщив пользователю почему.