我的应用程序根据一些内置逻辑将适当的UserControl加载到画布上。
有时需要用另一个UserControl替换控件。
要在代码中卸载控件,我将其与父级分离,但是我注意到(通过调试窗口)控件中的进程仍处于活动状态。
然后我订阅了Unloaded事件并停止了在引发事件时在用户控件中运行的计时器。
这是处理此问题的正确方法吗?我应该如何确保UserControl的这个实例已经消失,而且仍然无法在后台运行?
我如何加载UserControl
var arp = new CisDeparturesPanel(_config.CrsCode);
PanelContainer.Children.Add(arp);
_panel = arp;
我如何分离UserControl
var element = _panel as CisDeparturesPanel;
PanelContainer.Children.Remove(element);
_panel = null;
UnLoaded事件处理程序
private void CisDeparturesPanel_OnUnloaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Unloaded");
_cacheReadTimer.Stop();
_cacheReadTimer.Dispose();
_displaySwitchTimer.Stop();
_displaySwitchTimer.Dispose();
_timeNowTimer.Stop();
_timeNowTimer.Dispose();
_updateCacheFromLiveData.Stop();
_updateCacheFromLiveData.Dispose();
}
答案 0 :(得分:1)
在silverlight中,您可以向要检查的对象添加空终结器:
public ~ClassToCheck()
{} // set breakpoint here
如果您想检查它是否已完全卸载,请调用GC.Collect();
。
在wpf中应该类似。