我正在查看我的应用程序中的事件和消息,但我不确定它们的生命周期以及何时应该注册它们。
在控件的构造函数中,我注册接收消息(或事件处理程序)。虽然我认为这是一个错误,但我没有取消注册
例如,在此帖子中:MVVM Messaging vs RaisePropertyChanged<T>它表示要取消注册Unloaded
事件。
我的应用程序中的Hwever我正在使用Telerik控件(它可能发生在其他控件中)并且我在主屏幕中有一个窗口。当我取消停靠屏幕时,即使窗口本身似乎没有关闭,Unloaded
和Loaded
事件也会触发。
因此,如果我在Unloaded
取消注册,则会导致问题。那么我应该在什么时候这样做?
答案 0 :(得分:2)
一般来说,一旦我知道它们不再相关,我就会取消注册事件,这可能会有所不同。如果发生了卸载,但窗口仍在停留,那么加载也是有意义的(正如你所提到的)。在这种情况下,您可能应该在加载时注册它们,并在卸载时取消注册它们。这应该保证匹配。如果你需要在userControl / page的生命周期内使用它,我看不到比你可以使用的卸载更好的事件。
答案 1 :(得分:2)
一般情况下,我同意D..'s answer,但有些情况下,Loaded和Unloaded事件处理程序会多次调用。我通过在注册之前添加bool变量来检查这个问题。
示例代码:
bool _hasRegistered; // default value is false
OnLoaded()
{
//
if (!this._hasRegistered)
{
// your register code here
this._hasRegistered = true;
}
}
OnUnloaded()
{
// your un-register code here
}