Какой лучший способ прервать тему в моем scenerio - PullRequest
0 голосов
/ 14 июля 2010

Извините, если другие люди задавали подобный вопрос раньше.У меня есть простое приложение с графическим интерфейсом, который загружает некоторые файлы на сервер.Я поместил работу по загрузке в отдельную ветку.Когда пользователи хотят выйти из приложения, будет установлено событие, чтобы уведомить поток о нормальном выходе.Тогда поток пользовательского интерфейса будет ждать его.Код, который я использовал для прерывания потока, выглядит следующим образом: -

if (mUploadThread != null) {
  if (mStopUploadEvent.WaitOne(0, true)) {
   string message = @"A normal cancellation may take a couple of minutes. Are you sure you want forcibly abort?";
   string caption = @"Warning";
   if (DialogResult.Yes == MessageBox.Show(message, caption, MessageBoxButtons.YesNo)) {
    mUploadThread.Abort();
   }

  } else {
   mStopUploadEvent.Set();
  }

  do {
   Application.DoEvents();
  } while (!mUploadThread.Join(1000));
 }

Здесь я хочу завершить рабочий поток, если пользователь этого захочет.Но метод abort () просто не работает.Любое предложение приветствуется.

Ответы [ 2 ]

1 голос
/ 14 июля 2010

Ну, как вы загружаете?Thread.Abort - это редко разумный выбор - он может оставить вас AppDomain (или даже Process) в полностью запутанном состоянии.Если вы загружаете через http, вы можете попробовать использовать асинхронные методы, позволяющие вам вызвать HttpWebRequest.Abort, что немного более удобно.

0 голосов
/ 14 июля 2010

Кстати, это просто добавление к тому, что сказал Марк: этот ответ может помочь понять, почему .Abort не такой хороший выбор.

...