在代码中卸载用户控件的正确方法

时间:2015-02-07 22:22:54

标签: c# wpf

我的应用程序根据一些内置逻辑将适当的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();

        }

1 个答案:

答案 0 :(得分:1)

在silverlight中,您可以向要检查的对象添加空终结器:

public ~ClassToCheck()
{} // set breakpoint here

如果您想检查它是否已完全卸载,请调用GC.Collect();

在wpf中应该类似。