我应该在哪里等待WinForms应用程序中的线程完成

时间:2015-08-13 13:54:13

标签: c# winforms

我应该在WinForms应用程序中等待线程完成的位置? FormClosed / FormClosing个事件?哪一项最适合这项任务?

我有一项任务,定期检查某些文件并向某个站点发出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 个答案:

答案 0 :(得分:1)

没有真正试图进入细节,只选择两个:

  

FormClosed / FormClosing个事件?哪一项最适合这项任务?

FormClosed语义更好,因为

  

您可以使用此事件执行诸如释放表单使用的资源以及保存表单中输入的信息或更新其父表单等任务。

FormClosing中,您可能决定阻止关闭。

注意:

  

调用Application.Exit方法退出应用程序时,不会引发Form.Closed和Form.Closing事件。如果在必须执行的这些事件中都有验证代码,则应在调用Exit方法之前单独为每个打开的表单调用Form.Close方法