1

私のソリューションにはいくつかのユーザーコントロールがあり、メインウィンドウで ContentControl のコンテンツを変更するだけです。1つのユーザーコントロールにはタイマーがあります

    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 でタイマーをナビゲートした後も、そのユーザー コントロールをどのように破棄すればよいでしょうか? (TrinketBringed を null に設定できることはわかっていますが、タイマーは引き続き動作します)

タイマーだけでなく、ユーザーコントロールもメモリに残っていると思います

4

2 に答える 2

0

タイマーが最初のユーザーコントロール内にあるようです。そのオブジェクトへの参照を失う前にタイマーを停止するか、タイマーを制御できないようにする必要があります。

于 2012-10-08T21:05:58.027 に答える
0

それで、あなたの質問はタイマーを止める方法ですか?を使用しtimer.Stop()ます。TricketBringedところで、名前を に変更すると、コードが読みやすくなります。TrincketBrought

于 2012-10-08T21:02:45.670 に答える