C# 什么';这是在我的场景中中止线程的最好方法

C# 什么';这是在我的场景中中止线程的最好方法,c#,multithreading,abort,C#,Multithreading,Abort,如果以前有人问过类似的问题,我很抱歉。 我有一个简单的GUI应用程序,可以将一些文件上传到服务器。我把上传工作放在一个单独的线程中。当用户想要退出应用程序时,将设置一个事件来通知线程正常退出。然后UI线程将等待它。我用于中止线程的代码如下所示:- if (mUploadThread != null) { if (mStopUploadEvent.WaitOne(0, true)) { string message = @"A normal cancellation may take a

如果以前有人问过类似的问题,我很抱歉。 我有一个简单的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()方法就是不起作用。任何建议都将不胜感激。

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

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

如果您将工作线程标记为背景,你不需要自己中止它-这不会阻止应用程序退出。完全同意不使用线程。正常中止,但听起来这是一个他将要退出整个进程的场景。我知道中止不是一个好选择,这就是为什么我使用事件通知线程先退出。是的,我想我应该使用异步http方法。谢谢你,他是这样做的<代码>do{Application.DoEvents();}而(!mUploadThread.Join(1000))@Marc:错过了那个部分;从我的回答中删除。