Par hasard, utilisez-vous plusieurs threads? Si vous n'arrêtez pas vos threads d'arrière-plan, ils continueront à exécuter votre processus, même via un appel à Application.Restart.
J'ai collé dans un code ci-dessous qui illustre ce comportement. Pour le voir, compilez un projet de test avec le code ci-dessous et exécutez-le. (vous devrez mettre un bouton sur le formulaire et affecter le gestionnaire de clic que j'ai défini dans le code ci-dessous). Démarrez le Gestionnaire des tâches, accédez à l'onglet Processus et assurez-vous d'ajouter la colonne PID (ID du processus) à la vue.
Chaque fois que vous cliquez sur le bouton, l'application redémarre, mais vous devriez voir l'ancien processus toujours bloqué en mémoire (en raison d'un thread d'arrière-plan qui n'a pas été fermé).
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();
}
}
En supposant que cela est votre problème, la meilleure façon de le corriger est de mettre une sorte de contrôle dans vos fils de fond (même un drapeau bool fera). Demandez-leur de vérifier périodiquement et quittez normalement lorsque votre application s'arrête. Remarque: vous pouvez définir la propriété d'arrière-plan du thread sur true et la quitter automatiquement, mais si vous le faites, vous n'avez aucun contrôle sur l'instruction exécutée par le thread à sa sortie. t effectuer tout type de nettoyage. Il est préférable de coder votre propre chèque.
Qu'est-ce que cela a à voir avec la question? Le fait est que je voudrais recommencer tous les jours à 2h du matin. – Brad
Le pourquoi est important ... et j'ai l'impression que c'est la première chose que la plupart des gens vont se demander. –
@Brad - le pourquoi est important parce que (comme avec d'autres questions ici sur SO) parfois le problème sous-jacent peut être résolu rendant votre problème de surface discutable. La question est tout à fait légitime, bien que je l'aurais probablement posté dans les commentaires au lieu d'une réponse réelle. – AllenG