2010-07-14 41 views
0

如果其他人以前曾問過類似問題,我很抱歉。 我有一個簡單的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()方法不起作用。任何建議表示讚賞。

+0

如果您將工作線程標記爲背景,則不需要自行中止它 - 它不會阻止應用程序退出。 – 2010-07-14 06:11:20

回答

1

那麼,你是如何上傳? Thread.Abort很少一個明智的選擇 - 它可以讓你AppDomain(或甚至Process)在一個完全混亂的狀態。如果你通過http上傳,你可以嘗試使用異步方法,允許你打電話HttpWebRequest.Abort,這更友好一些。

+0

完全同意不正常使用Thread.Abort,但聽起來像這是一個場景,他即將退出整個過程無論如何AFAICT。 – 2010-07-14 06:14:04

+0

我知道Abort不是一個好選擇,這就是爲什麼我使用事件來通知線程首先退出。是的,我認爲我應該使用異步http方法。謝謝。 – leon 2010-07-14 07:18:36

0

順便說一句,這只是添加到什麼馬克說,this answer可能有助於理解爲什麼.Abort不是一個好的選擇。

+0

他在做什麼...'do {Application.DoEvents(); } while(!mUploadThread.Join(1000));' – 2010-07-14 06:39:36

+0

@Marc:錯過了那部分;從我的答案中刪除。 – 2010-07-14 09:50:35

相關問題