none
WPF关闭窗口为什么不会自动释放里面的控件? RRS feed

  • 问题

  • 主窗口

    public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } int index = 0; private void Button_Click(object sender, RoutedEventArgs e) { Window1 wind = new Window1(index); wind.Show(); index++; } }

     子窗口
    public partial class Window1 : Window
        {
            
            int index;
            public Window1(int index)
            {
                InitializeComponent();
                this.index = index;
                DispatcherTimer dispatcherTimer = new DispatcherTimer();
                dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
                dispatcherTimer.Tick += new EventHandler(timeCycle);
                dispatcherTimer.Start();
            }
    
            private void timeCycle(object sender, EventArgs e)
            {
                Console.WriteLine(index);
            }
        }

    我发现在WPF中当我关闭子窗口的时候,这个Timer依旧在运行。但是在winform中是不会出现这种情况的。

    请问这种情况在WPF中是正常现象??如果不是正常现象应该如何销毁这些对象哪??

    2019年5月27日 14:17

全部回复

  • 计时器不是个控件吧

    解决办法是将DispatcherTimer作为公共,在窗口的关闭事件中进行Stop处理

    2019年5月28日 4:27

  • Hi whiskets,   

    我们如果需要释放DispatcherTimer object,则需要在不需要使用它的时候,disable 它,并且将它的引用设置为空。这个样GC会自动的进行清理。

    你也可以通过设置  isEnabled=false  或调用  timer.stop()来禁用或停止计时器。也是可以的。


    Best regards

    Yong Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年5月28日 7:08
    版主