piątek, 17 sierpnia 2012

[WPF] Freezable

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