Приложение Winform не закрывается - PullRequest
2 голосов
/ 21 июня 2010

У меня есть небольшое приложение, которое клиент использует для обновления некоторых данных вручную. Это очень просто; при загрузке заполняет список компаний, из которых пользователь может выбрать и нажать кнопку, чтобы обновить данные в другой системе. Клиент хочет иметь возможность запускать те же функции из командной строки, поэтому я добавил фонового работника. Когда приложение запускается, я проверяю конкретный аргумент и, если он найден, я запускаю работника. Как только работник завершает работу, я вызываю Close ();

Кажется, что все работает нормально (данные обновляются, как ожидается, и приложение закрывается), но когда я проверяю диспетчер задач, приложение все еще работает.

Мои вопросы:

  1. Какую вещь / вещи я должен искать, чтобы найти причину, по которой приложение все еще работает?
  2. Есть ли лучший способ сделать это?

Вот пример кода:

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();
        }

Ответы [ 3 ]

3 голосов
/ 21 июня 2010

2) Есть ли лучший способ сделать это?

Вы можете запустить код из консольного приложения и убедиться, что у вас нет проблем с WinForms / Threading.

Как вариант, вы можете проверить Командную строку непосредственно в Main () и даже не выполнить Application.Run (mainForm).

0 голосов
/ 21 июня 2010

Фоновый работник находится в другом потоке, чем поток пользовательского интерфейса.

Создание делегата для обработки вещей (в этом случае остановка) в потоке пользовательского интерфейса. Пример здесь

0 голосов
/ 21 июня 2010

Вместо вызова Close () попробуйте вызвать Application.Exit (). Это завершит приложение, а не просто закроет форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...