您应该在什么时候注册/注销事件/消息



我正在查看我的应用程序中的事件和消息,但我不确定它们的生命周期以及何时应该为它们注册。

此刻,我在控件的构造函数中注册以接收消息(或事件处理程序)。我没有注销,但我认为这是一个错误

例如在这个帖子中:MVVM Messaging vs RaisePropertyChanged<它说注销Unloaded事件。>

然而,在我的应用程序中,我使用Telerik控件(它可能发生在其他控件),我在主屏幕内有一个窗口。当我卸载屏幕时,在其他时间UnloadedLoaded事件触发,即使窗口本身似乎没有关闭。

因此,如果我在Unloaded中注销,那么它将导致一个问题。那么我应该在什么时候做呢?

一般来说,一旦我知道事件不再相关,我就注销它们,这可能会有所不同。如果卸载正在发生,但窗口仍然存在,那么加载也正在发生(如您所提到的)。在这种情况下,也许您应该在load中注册它们,并在unload中注销它们。这应该能保证匹配。如果您需要在userControl/page的生命周期内使用它,我认为没有比Unload更好的事件了。

总的来说,我同意D…的答案,但有一些情况下,加载和卸载事件处理程序调用不止一次。我通过在注册前添加bool变量来检查这个问题。

示例代码:

bool _hasRegistered; // default value is false
OnLoaded()
{
    //
    if (!this._hasRegistered)
    {
        // your register code here
        this._hasRegistered = true;
    }
}
OnUnloaded()
{
    // your un-register code here
}

最新更新