Obiekty typu Freezable charakteryzują się tym, iż posiadają dwa stany : frozen oraz unfrozen. Kiedy znajdują się one w stanie unfrozen, zachowują się jak zwykłe obiekty, natomiast gdy ich stan zmieni się na frozen, nie można ich modyfikować. Taki stan ma dwie główne zalety : oszczędność zasobów, które w normalnym stanie odpowiadają za notyfikowanie zmian, oraz możliwość współdzielenia zamrożonego obiektu przez wiele wątków. Przykładem obiektów typu Freezable są Brush, czy Transform, które korzystają z niezarządzanych zasobów, których monitorowanie jest kosztowne.Klasa Freezable dzieidziczy z DependencyObject, tak więc dostajemy wszystkie zalety związne z Dependency Property. W przypadku, gdy nasz obiekt został zamrożony metodą Freeze(), nie możemy przeprowadzić operacji odwrotnej. Możemy natomiast stworzyć nowy, "odmrożony obiekt", klonując poprzedni.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
FreezablesTest();
}
private void FreezablesTest()
{
SolidColorBrush myBrush = new SolidColorBrush(Colors.Gainsboro);
LayoutRoot.Background = myBrush;
myBrush.Freeze();
try
{
myBrush.Color = Colors.Green;
LayoutRoot.Background = myBrush;
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
var newBrush = myBrush.Clone();
newBrush.Color = Colors.Green;
LayoutRoot.Background = newBrush;
}
}
Wyjątek :
Cannot set a property on object '#FFDCDCDC' because it is in a read-only state.
Brak komentarzy:
Prześlij komentarz