WPFでコントロールを正しく削除する方法については、StackOverflowで質問されている質問を参照してください。一般的には、手動で処理しない(または処理できない)というコメントがいくつかあります。参照を保持していない限り、最終的にGCによってクリアされます。偶然、私が削除したと思ったコントロールの1つが、親から削除したにもかかわらず、やっていることに気づいた。WPF - DispatcherTimerを持つコントロールを削除しても消えていないようです
できるだけ少ない行でサンプルを再作成しました。コントロールにはDispatcherTimerがあります。 削除したいコントロールの背後にあるWPFコードを次に示します。
私のコントロールを追加したり削除したりするためのコードです。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void AddClicked(object sender, RoutedEventArgs e)
{
anyControlHolder.Children.Add(new MyControl());
}
private void RemoveClicked(object sender, RoutedEventArgs e)
{
anyControlHolder.Children.Clear();
}
}
私はこのコードを実行して、動的にカスタムユーザーコントロール(MyControlと)を追加および削除するとき私がいる問題は、それがタイマーであるということです(この例ではあなたはそれが中にメッセージを書き出す見ることができます刻み続けます出力ウィンドウ)、チックイベントで作業を続けます。 少なくとも、コントロールが削除されたときにタイマーを止めるのにどのようなパターンを使用する必要がありますか?
アンロードされたイベントを追加しても動作しているようです。 WeakEventPatternも見ているはずです。誰にもこれに関する提案はありますか?プライベートvoid UserControl_Unloaded(オブジェクト送信者、System.Windows.RoutedEventArgs e) { timer.Stop(); } – DTig
シャックス、私は甘い例とすべてをまとめる...あなたのコメントに気付かなかった!私は実際にWeakEventPatternを自分で調べたことはありません - 私の最初の検索でこれが得られました:http://msdn.microsoft.com/en-us/library/aa970850.aspx私もそれを見ていきます! – Pwninstein