Я использую Delphi (7-2010) и пытаюсь найти хороший способ обработки исключений при освобождении форм приложения.Приложение имеет несколько форм, которые принадлежат объекту Application.Когда пользователь выходит из системы, мне нужно освободить все существующие формы, чтобы не поддерживать состояние пользователя, а затем показать диалоговое окно входа для следующего пользователя, который входит в систему.
Иногда при попытке освобождения возникает исключение.одна из форм.Это оставляет форму в памяти, но в неизвестном / непригодном для использования состоянии, поэтому я не могу повторно использовать форму для следующего пользователя, а также не могу избавиться от нее из памяти.Поскольку формы принадлежат приложению, я не могу напрямую создать новую версию формы для следующего пользователя, так как это приведет к ошибке «Компонент с именем MyForm уже существует» из VCL, и я немного не уверенв любом случае иметь старые экземпляры формы в памяти.
Я бы хотел посмотреть, что другие будут делать в этом случае.Вот несколько идей:
- Завершите работу приложения, когда получите эти исключения, поэтому обязательно протрите планшет.В любом случае, пользователь выходит из системы, поэтому, скорее всего, он завершил работу с приложением.При необходимости перезапустите приложение.
- Сделайте формы, не принадлежащие Приложению, чтобы вы могли создавать их несколько экземпляров и удостовериться, что все несвободные / поврежденные формы как минимум скрыты.
- Динамически генерируйте имя каждой формы или устанавливайте его пустым, чтобы никогда не было повторяющихся имен и ошибок «уже существует» из VCL.
- Пишите приложение так хорошо, чтобы никогда не было исключенийпри освобождении объектов (нереально - мне нужен план на случай непредвиденных ошибок).
Мое решение было одной из первоначальных идей выше.Я добавил блок try / exception вокруг цикла, который освобождает формы, и, если возникает исключение, я показываю сообщение об ошибке пользователю, не вызывая его, а затем вызываю ExitProcess (0), чтобы немедленно убить приложение.