什么事件指示用户控件正在被销毁



我有一个UserControl派生的控件,它显示从Web服务器获取的一些信息。我目前正在使控件的初始化异步,以提高响应能力。

在我的 Load 事件处理程序中,我正在创建一个 CancelTokenSource,并在各种异步调用中使用关联的 Token。

我现在要确保如果用户在异步操作完成之前关闭窗体,该操作将被取消。换句话说,我想在令牌上调用取消。

我试图弄清楚在哪里做这件事。如果有一个我可以捕获的卸载事件,那将是完美的 - 但没有。事实上,我找不到任何看起来合适的活动。

我可以捕获包含窗体的关闭事件,但我真的想将所有内容保留在我的 UserControl 本地。

建议?

我建议使用Control::HandleDestroyed事件。当基础 HWnd 被销毁时(这通常在父窗体关闭时发生)引发。若要在您自己的 UserControl 中处理它,应重写 OnHandleDestroy。

此时,您具有对控件属性的完全访问权限,因为它尚未释放。

另一种解决方案

    protected override void OnParentChanged(EventArgs e)
    {
        base.OnParentChanged(e);
        if (parentForm != null)
        {
            parentForm.Closing -= parentForm_Closing;
        }
        parentForm = FindForm();
        if (parentForm != null)
            parentForm.Closing += parentForm_Closing;
    }
    void parentForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        parentForm.Closing -= parentForm_Closing;
        parentForm = null;
        //closing code
    }

为什么不直接使用 Disposed 事件?

当窗体关闭时,它将自行调用Dispose,并且所有子控件也将递归释放。

试试这个:

UserControl.Dispose();

最新更新