简体   繁体   English

WPF ContentControl有些不清楚

[英]WPF ContentControl some unclears

i have some usercontrols in my solution, in main window i just change content of ContentControl. 我的解决方案中有一些用户控件,在主窗口中,我只是更改ContentControl的内容。 in one usercontrol there is a timer 在一个用户控件中,有一个计时器

    BringTrinket trincket = new BringTrinket();
    trincket.TrincketBringed += new TrincketBringedEventHandler(trincket_TrincketBringed);
    this.contentSwitcher.Content = new BringTrinket();
    }

    void trincket_TrincketBringed(object sender, TrincketEventArgs e)
    {            
        MessageBox.Show(e.TrincketNumber);
        this.contentSwitcher.Content = new Loading();
    }`

after some event Main Window should change content to (new Loading()), it's OK! 在某些事件后,主窗口应将内容更改为(new Loading()),这没关系!

public partial class BringTrinket : UserControl, ISwitchable
{
    public event TrincketBringedEventHandler TrincketBringed;

    private DispatcherTimer timer;

    public BringTrinket()
    {
        InitializeComponent();
        /////////////////////////////////////////////////////////////////////////////
        timer = new DispatcherTimer();
        timer.Interval = new TimeSpan(0, 0, 0, 0, 1800);
        timer.Tick += new EventHandler(timer_Tick);
        timer.Start();
        /////////////////////////////////////////////////////////////////////////////
    }

    /////////////////////////////////////////////////////////////////////////////
    void timer_Tick(object sender, EventArgs e)
    {
        if (TrincketBringed != null)
        {
            TrincketBringed(this, new TrincketEventArgs("Hello"));
            //TrincketBringed = null;
        }
    }

But after i've navigataged Timer in BringTrinket still working, how have i dispose that usercontrol? 但是,当我在BringTrinket中导航Timer仍可正常工作后,如何处置该用户控件? (I know i can set TrincketBringed to null, but timer will still be working) (我知道我可以将TrincketBringed设置为null,但是计时器仍然可以使用)

I think not only timer, but also usercontrol remains in memory 我认为不仅计时器而且用户控制都保留在内存中

So, your question is how to stop the timer? 那么,您的问题是如何停止计时器? Use timer.Stop() . 使用timer.Stop() BTW, your code would read better if you rename TricketBringed to Trincket Brought . 顺便说一句,如果将TricketBringed重命名为Trincket Brought ,则代码的阅读效果会更好。

It looks like your timer is inside of your first usercontrol. 看来您的计时器在您的第一个用户控件内。 You would either need to stop the timer before losing the reference to that object, or better yet, move the timer out of your control. 您可能需要先停止计时器,然后再丢失对该对象的引用,或者更好的是,将计时器移出控件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM