2015-08-13 63 views
0

我應該等待WinForms應用程序中的線程完成位置? FormClosed/FormClosing事件?哪一個是最適合這項任務的?我應該在WinForms應用程序中等待線程完成的位置

我有一個任務,定期檢查一些文件並向某個站點發出HTTP請求。這是我的應用程序的主要形式。該任務是可取消的,所以我想打斷它並等待一段時間完成。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     deviceDetectionTask = new CancellableTask(() => DeviceDetection()); 
    } 

    // ... 

    private CancellableTask deviceDetectionTask; 
} 

public class CancellableTask 
{ 
    public CancellableTask(Action action) 
    { 
     task = Task.Factory.StartNew(action, ts.Token); 
    } 

    public void Cancel() 
    { 
     ts.Cancel(); 
    } 

    private CancellationTokenSource ts = new CancellationTokenSource(); 
    private Task task; 
} 

在此先感謝。

+1

什麼線程?做什麼?你想做什麼,爲什麼?你嘗試過什麼,它是如何不符合你的期望的? – kai

+0

@kai更新了問題 – FrozenHeart

+0

這是一個非常模糊的問題,很難給出任何形式的明確答案。一般情況下(假設長時間工作的線程),我個人的偏好是在FormClosing中等待,因爲關閉操作可以在那裏取消。它需要一些棘手的邏輯來避免阻塞UI並將其變成全白窗口。 – xxbbcc

回答

1

沒有真正試圖進入只給細節從兩個選擇:

FormClosed/FormClosing事件?哪一個是最適合這項任務的?

FormClosed,是語義更好,因爲

您可以使用此事件來執行任務,如釋放所用的形式,並保存在表單中輸入的信息或更新其父資源形成。

FormClosing您可能會決定阻止關閉。

注:

當Application.Exit方法被調用來退出你的應用程序的Form.Closed和Form.Closing事件不會引發。如果您在必須執行的任一事件中都有驗證代碼,則應在調用Exit方法之前分別調用每個打開表單的Form.Close方法