अपडेट करें: मैंने इसे एक और अधिक स्वच्छ रूप से स्थापित, मशीन पर करने की कोशिश की। मैं उस मशीन पर इसे पुन: पेश नहीं कर सका। अगर मुझे पता चलता है कि क्या अपमानजनक (VSStudio) घटक इसका कारण बनता है, तो मैं आपको बता दूंगा।डब्ल्यूपीएफ में: बच्चे। रिमूव या बच्चे। क्लीयर ऑब्जेक्ट्स मुक्त नहीं करता
मैं कोड से कुछ UIElements बना रहा हूं और सामान साफ़ करने के लिए कचरा संग्रह की उम्मीद कर रहा था। हालांकि, जब मैं इसकी अपेक्षा करता था तब ऑब्जेक्ट फ्री-एड नहीं होते थे। मैं उन्हें RemoveAt (0) पर मुक्त होने की उम्मीद कर रहा था, लेकिन वे केवल कार्यक्रम के अंत में मुक्त हो गए हैं।
कैनवास के बच्चों के संग्रह से हटाए जाने पर वस्तुओं को मुक्त कैसे किया जा सकता है?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
MouseDown="Window_MouseDown">
<Grid>
<Canvas x:Name="main" />
</Grid>
</Window>
कोड के पीछे है:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
GC.Collect(); // This should pick up the control removed at a previous MouseDown
GC.WaitForPendingFinalizers(); // Doesn't help either
if (main.Children.Count == 0)
main.Children.Add(new MyControl() { Background = Brushes.Yellow, Width = 100, Height = 50 });
else
main.Children.RemoveAt(0);
}
}
public class MyControl : UserControl
{
~MyControl()
{
Debug.WriteLine("Goodbye");
}
}
मुझे पता है का उपयोग कर अपंजीकृत कर, लेकिन इस मामले में ऐसा नहीं लगता। जब मैं माउसडाउन हैंडलर की शुरुआत में जीसी। कोलेक्ट() जोड़ता हूं, तो उसे कचरा संग्रह के लिए योग्य नियंत्रण लेना चाहिए। यह नहीं है मैं वहां इकट्ठा होता हूं अभी भी कैनवास ऑब्जेक्ट में आंतरिक रूप से इसका कुछ संदर्भ होना चाहिए। –
@ बार्ट: हैंडलर के अंत में जीसी.कोलेक्शन जोड़ने का प्रयास करें - हैंडलर की शुरुआत में नियंत्रण यूआई में अभी भी है ... क्या इससे मदद मिलती है? –
@ बार्ट: इसके अलावा - GC.WaitForPendingFinalizers() को कॉल जोड़ने का प्रयास करें - देखें: http://msdn.microsoft.com/en-us/library/system.gc.waitforpendingfinalizers.aspx –