J'ai une petite application qu'un client utilise pour mettre à jour manuellement certaines données. C'est très basique; Au chargement, il remplit une liste d'entreprises que l'utilisateur peut sélectionner et clique sur un bouton pour mettre à jour les données dans un autre système. Le client veut être capable d'exécuter cette même fonctionnalité à partir de la ligne de commande, j'ai donc ajouté un worker de fond. Lorsque l'application est lancée, je vérifie un argument spécifique et si je le trouve, je lance le travailleur. Une fois le travail terminé, j'appelle Close();L'application Winform ne se ferme pas
Tout semble fonctionner correctement (les données sont mises à jour comme prévu et l'application semble se fermer), mais lorsque je vérifie le gestionnaire de tâches, l'application est toujours en cours d'exécution.
Mes questions:
- Quelle chose/choses dois-je être à la recherche pour trouver la cause de l'application toujours en cours?
- Y a-t-il une meilleure façon de faire cela?
Voici un échantillon du code:
public MainForm()
{
InitializeComponent();
var args = Environment.GetCommandLineArgs();
Array.ForEach(args, x => x.ToLower());
if (args.Contains("u"))
backgroundWorker.RunWorkerAsync();
}
private void BackgroundWorkerDoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
//call to web service to update data
}
private void BackgroundWorkerRunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
Close();
}
Quel est le code dans votre fichier Program.cs? –
Le code dans Program.cs est la valeur par défaut. Je n'avais pas modifié cela. – Chuck
Je présume Application.Run() dans Program.cs n'a pas quitté, si c'est le cas, alors quelque chose garde le message de pompage sur le thread en cours d'exécution - probablement quelque chose sur le formulaire. –