powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как в Dispose() узнать, что процесс и программа завершаются
7 сообщений из 7, страница 1 из 1
Как в Dispose() узнать, что процесс и программа завершаются
    #38975215
ДАП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разработал класс с наследованием Disposable. В деструкторе класса или в методе Dispose хочу освободить неуправляемые объекты. Но освободить их нужно в зависимости от того, кто и как вызвал метод Dispose. Если программа принудительно закрывается, то мне нужно сделать Kill или Terminate в своих задачах (не важно в каких). Если же это просто пользователь решил удалить объект и продолжает работать дальше, то с освобождением ресурсов можно подождать и не делать им, условно говоря kill.

Можно ли как-то отличить в Dispose принудительное завершение программы от сборщика мусора, который просто решил удалить объект за ненадобностью, но программа продолжает работать дальше. Мой класс должен быть полностью автономным и не ссылаться ни на какие другие объекты в приложении. Должен использовать только стандартные методы .NET, либо WinAPI.
...
Рейтинг: 0 / 0
Как в Dispose() узнать, что процесс и программа завершаются
    #38975293
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, неуправляемые ресурсы следует освобождать как можно скорее, не дожидаясь, пока сборщик мусора это сделает.
Когда объект больше не нужен - вызываем Dispose. Если забыли это сделать, то GC вызовет финализатор. Вот в финализаторе и предусматриваем дополнительный код (плюс обязательно выводим в лог: "ты чудак, забыл вызвать диспоз!")

Чем не устраивает стандартная реализация паттерна? И вот .
...
Рейтинг: 0 / 0
Как в Dispose() узнать, что процесс и программа завершаются
    #38975302
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАПKill или Terminate
Эм... а при чем здесь диспоз? Килять внешние процессы... прикольно конечно...
...
Рейтинг: 0 / 0
Как в Dispose() узнать, что процесс и программа завершаются
    #38975312
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в Dispose() узнать, что процесс и программа завершаются
    #38975431
ДАП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikВообще-то, неуправляемые ресурсы следует освобождать как можно скорее, не дожидаясь, пока сборщик мусора это сделает.
Когда объект больше не нужен - вызываем Dispose. Если забыли это сделать, то GC вызовет финализатор. Вот в финализаторе и предусматриваем дополнительный код (плюс обязательно выводим в лог: "ты чудак, забыл вызвать диспоз!")

Чем не устраивает стандартная реализация паттерна? И вот .

Он и реализован.
Внешний неуправляемый ресурс вызывает callback-функцию на c#, в которой потенциально может быть что-то выведено на экран через Invoke. При завершении приложения может появиться (и появляется) deadlock. Поэтому и хочу определить, что если программа находится в состоянии завершения, то прибиваем сторонние ресурсы. Если же программа продолжает работать дальше, то спешить нам некуда, можно дождаться штатного завершения.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как в Dispose() узнать, что процесс и программа завершаются
    #39345972
Roma_Nok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДАП ты нашел решение? Напиши результат поста пожалуйста ))
...
Рейтинг: 0 / 0
Как в Dispose() узнать, что процесс и программа завершаются
    #39346041
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этиx целей есть дерево процессов, если процесс принудительно отстрелить, то его выполнение прервётся, так что ни о каком послед. выполнении речи быть не может. Но когда процесс отстреливают, можно ука3ать, чтоб система убила все процесс в его ветке, тогда они все 3авершатся.
по другому не бывает. Либо еще 1 вариант: процессы которые были 3апущены и3 твоего процесса проверяют наличие иx родителя, если его нет, они 3авершаются. Например с помощью семафоров, когда семафор освобождается, 3начит пора 3акрываться.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как в Dispose() узнать, что процесс и программа завершаются
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]