什么是在我的场景中中止线程的最佳方法

时间:2010-07-14 05:28:11

标签: c# multithreading abort

如果其他人之前曾问过类似的问题,我很抱歉。 我有一个简单的GUI应用程序,可以将一些文件上传到服务器。我将上传工作放在一个单独的线程中。当用户想要退出应用程序时,将设置一个事件来通知线程正常退出。然后UI线程将等待它。我用来中止线程的代码如下: -

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 个答案:

答案 0 :(得分:1)

嗯,你是怎么上传的? Thread.Abort 很少是一个明智的选择 - 它会让你AppDomain(甚至Process)处于一个完全混乱的状态。如果您通过http上传,可以尝试使用异步方法,允许您拨打HttpWebRequest.Abort,这样会更友好。

答案 1 :(得分:0)

不过,这只是为了补充Marc所说的,this answer可能有助于理解为什么.Abort不是一个好的选择。