Как правильно убирать после приложений App Designer - PullRequest
2 голосов
/ 05 октября 2019

В конструкторе приложений MATLAB единственный найденный мной редактируемый деструктор - это обратный вызов UIFigureCloseRequest. Однако, кажется, это не вызывается во всех случаях, когда приложение App Designer может быть закрыто. Например, добавьте timer в качестве свойства к классу приложения. Если этот таймер равен delete d в обратном вызове CloseRequest, все в порядке, пока приложение закрывается, закрывая главное окно.

Однако, если экземпляр приложения уничтожается иначе - например, путемпри нажатии кнопки «Выполнить» в редакторе - будет отключен таймер отключения (как можно найти с помощью timerfindall). Это, конечно, может иметь непредвиденные последствия.

Поскольку деструктор приложения App Designer выделен серым цветом в редакторе, как я могу добавить его, чтобы обеспечить надежное уничтожение всех ресурсов?

1 Ответ

1 голос
/ 07 октября 2019

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

Следующее решение является «взломом», включающим редактирование системных файлов MATLAB.
Я не уверен, что это жизнеспособное решение, вы можете рассматривать его как доказательство концепции ...

  1. Найдите файл appdesigner.js.
    На моем (Windows) компьютере расположение файла: c:\Program Files\MATLAB\R2019a\toolbox\matlab\appdesigner\web\release\appdesigner\
    (файл выглядит как автоматически сгенерированный код).
  2. Сделать резервную копию .
  3. Откройте файл в текстовом редакторе (я использую Notepad ++).
    Найдите текст f.createCodeLine("delete(app."
  4. Замените вышеуказанный текст (код) на: f.createCodeLine("if ismethod(app, 'my_delete'), my_delete(app);end;delete(app."
    Сохраните измененный файл.
  5. Запустить конструктор приложений (может потребоваться перезапустить MATLAB).
    В режиме просмотра кода вы заметите изменение в серой части:
    if ismethod(app, 'my_delete'), my_delete(app);end;delete(app.UIFigure).
  6. Добавьте общедоступную функцию с именем my_delete.
    Поместите код очистки в метод my_delete.

Я тестировал решение в MATLAB R2019a.

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