C# 什么';这是在我的场景中中止线程的最好方法
如果以前有人问过类似的问题,我很抱歉。 我有一个简单的GUI应用程序,可以将一些文件上传到服务器。我把上传工作放在一个单独的线程中。当用户想要退出应用程序时,将设置一个事件来通知线程正常退出。然后UI线程将等待它。我用于中止线程的代码如下所示:-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
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:错过了那个部分;从我的回答中删除。