System.Windows.DependencyProperty.CustomUnmanagedPropertyChangedCallbackSafe C# (CSharp) Method

CustomUnmanagedPropertyChangedCallbackSafe() private static method

private static CustomUnmanagedPropertyChangedCallbackSafe ( IntPtr dependency_object, IntPtr propertyChangeArgs, MoonError &error, IntPtr unused ) : void
dependency_object IntPtr
propertyChangeArgs IntPtr
error Mono.MoonError
unused IntPtr
return void
        private static void CustomUnmanagedPropertyChangedCallbackSafe(IntPtr dependency_object, IntPtr propertyChangeArgs, ref MoonError error, IntPtr unused)
        {
            DependencyProperty property;
            DependencyObject obj;

            try {
                try {
                    IntPtr uprop = NativeMethods.property_changed_event_args_get_property (propertyChangeArgs);
                    if (!properties.TryGetValue (uprop, out property)) {
                        Console.Error.WriteLine ("DependencyProperty.CustomUnmanagedPropertyChangedCallback: Couldn't find the managed DependencyProperty corresponding with native {0}/{1}", uprop, NativeMethods.property_changed_event_args_get_id (propertyChangeArgs));
                        return;
                    }

                    obj = NativeDependencyObjectHelper.Lookup (dependency_object) as DependencyObject;

                    if (obj == null)
                        return;

                    InvokeChangedCallback (obj, property, property.change_cb,
                           Value.ToObject (property.PropertyType, NativeMethods.property_changed_event_args_get_old_value (propertyChangeArgs)),
                           Value.ToObject (property.PropertyType, NativeMethods.property_changed_event_args_get_new_value (propertyChangeArgs)));
                } catch (Exception ex) {
                    error = new MoonError (ex);
                }
            } catch (Exception ex) {
                try {
                    Console.WriteLine ("Moonlight: Unhandled exception in DependencyProperty.UnmanagedPropertyChangedCallback: {0}", ex.Message);
                } catch {
                }
            }
        }