2012-10-08 77 views
1

我在我的解決方案中有一些用戶控件,在主窗口中我只是更改ContentControl的內容。 在一個用戶控件有一個計時器WPF 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(); 
    }` 

一些事件主窗口應該更改內容後(新加載()),它是OK!

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定時器仍然工作後,我如何處置該用戶控件? (我知道我可以設置TrincketBringed爲空,但計時器仍然會工作)

我覺得不僅是計時,而且用戶控件仍保留在內存

回答

0

所以,你的問題是如何停止計時器?使用timer.Stop()。 順便說一句,如果您將TricketBringed重命名爲TrincketBrought,代碼會更好。

+0

謝謝,我的英語不是很好:) –

0

它看起來像你的計時器是在你的第一個用戶控件。在丟失對該對象的引用之前,您需要停止計時器,或者更好的是,將計時器移出控件。

+0

我認爲不僅是計時器,而且還有usercontrol保留在內存中 –