| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > корректное завершение приложения |
| Автор: blackbanny 17.6.2013, 19:16 | ||||||
| Доброго времени суток! Я создаю dll своего проекта на C# Эту dll добавляю в зависимости другого приложения и запускаю свое приложение(dll), но после закрытия dll, закрывается и приложение которое ее использует В моем приложении есть класс, который создает форму:
в классе Form1 есть кнопка "Cancel", при нажатииa на которую я хочу закрыть свое приложение(dll), в Click на Cancel я пишу:
Без разницы, как закрывать приложение, вызывающее приложение закрывается вместе с моим... Подскажите, как закрыть только мое приложение?
Как узнать название процесса моей программы, чтобы я сделал Kill()? |
| Автор: Fobos 17.6.2013, 20:30 |
| Приложение это все же процесс. А библиотеки уже загружаются в процесс. Сл-но не вы управляете приложением и не вы должны его закрывать, ваша библиотека всего лишь должна предлагать какую-то функциональность для ее клиентов. Если вы используете какие-то ресурсы которые надо освободить, можете реализовать паттерн IDisposable в вашем Form1. Еще раз, вас вызвали - пусть они и думают, вы должны лишь выполнять ту работу для которой вы написали библиотеку, остально дела корабельной артиллерии. |
| Автор: blackbanny 18.6.2013, 06:14 | ||||||||||||
| Fobos, спасибо за ответ) сейчас опишу подробнее и ситуацию, когда я не пишу в своем приложении
в моем приложении(dll) есть класс Program, который создает Form1 в методе
в стороннем приложении после подключения dll, я вызываю свое приложение таким образом:
первый раз в стороннем приложении моя программа вызывается корректно, а вот после второго вызова выпадает exception: http://s2.ipicture.ru/uploads/20130618/88cUs15h.jpg если я комментирую строку в Program:
или ставлю true
то происходит тоже самое... :( |
| Автор: Fynivx 19.6.2013, 04:15 |
| Если я правильно понял, Вы в библиотеке пытаетесь сделать полноценное WinForms-приложение. Есть в .NET способы изоляции, но сейчас у Вас ошибка не в их незнании, а в неудачной архитектуре. В либу можно вынести формы и их инициализацию, но запуск самого приложения WinForms должен быть внутри самого приложения. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51bf36bf6ccc193133000002#findElement_E7045_51c106266ccc1933230002a7_0 |
| Автор: blackbanny 19.6.2013, 05:23 |
| проблему решил сделав singleton, т.е. в своем приложении класс с формой имеет instance конструктор и статический экземпляр класса, при каждом закрытии формы статический экземпляр класса уничтожал... |