Возможно, вы используете несколько потоков? Если вы не закрываете фоновые потоки, они будут поддерживать ваш процесс даже при вызове Application.Restart.
Я вставлял в код ниже, который демонстрирует это поведение. Чтобы увидеть это, скомпилируйте тестовый проект с приведенным ниже кодом и запустите его. (вам нужно будет поместить 1 кнопку в форму и назначить обработчик кликов, который я определил в коде ниже).
Запустите диспетчер задач, перейдите на вкладку «Процесс» и обязательно добавьте столбец идентификатора (идентификатор процесса) в представление.
Каждый раз, когда вы нажимаете кнопку, приложение перезагружается, но вы должны увидеть, что старый процесс все еще висит в памяти (из-за фонового потока, который не был закрыт).
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// start a background thread that will never be exited.
System.Threading.Thread thread = new System.Threading.Thread(delegate() { while (true) System.Threading.Thread.Sleep(1000); });
thread.Start();
}
private void button1_Click(object sender, EventArgs e)
{
Application.Restart();
}
}
Предполагая, что это ваша проблема, лучший способ исправить это поставить какой-то проверки в фоновых потоков (даже флаг BOOL будет делать). Попросите их периодически проверять и выходить изящно, когда ваше приложение отключается.
Примечание: вы можете установить для свойства фона потока значение true, и оно будет выведено автоматически, но если вы это сделаете, у вас нет контроля над тем, какая команда выполняет поток при ее выходе, t выполнить любой вид очистки. Лучше всего закодировать собственный чек.
что это касается вопроса? Дело в том, что я хотел бы перезапустить каждый день в 2 часа ночи. – Brad
Почему важно ... и у меня такое чувство, что первое, что задают многие люди. –
@ Брэд - почему это важно, потому что (как и другие вопросы здесь, на SO) иногда основной вопрос можно решить сделать свой поверхностный выпуск спорное. Вопрос полностью законный, хотя я, вероятно, разместил его в комментариях, а не как фактический ответ. – AllenG