1

我的解决方案中有一些用户控件,在主窗口中我只是更改 ContentControl 的内容。在一个用户控件中有一个计时器

    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();
    }`

在某些事件后主窗口应该将内容更改为 (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;
        }
    }

但是在我在 BringTrinket 中导航 Timer 仍然工作之后,我如何处理该用户控件?(我知道我可以将 TrincketBringed 设置为 null,但计时器仍然可以工作)

我认为不仅计时器,而且用户控件都保留在内存中

4

2 回答 2

0

那么,您的问题是如何停止计时器?使用timer.Stop(). 顺便说一句,如果您将代码重命名TricketBringed为.TrincketBrought

于 2012-10-08T21:02:45.670 回答
0

看起来您的计时器在您的第一个用户控件中。您需要在失去对该对象的引用之前停止计时器,或者更好的是,将计时器移出您的控制范围。

于 2012-10-08T21:05:58.027 回答