public D2D1LinearGradientBrush CreateLinearGradientBrush(D2D1LinearGradientBrushProperties linearGradientBrushProperties, D2D1BrushProperties brushProperties, D2D1GradientStopCollection gradientStopCollection)
        {
            if (gradientStopCollection == null)
            {
                throw new ArgumentNullException("gradientStopCollection");
            }

            ID2D1LinearGradientBrush linearGradientBrush;

            GCHandle brushPropertiesHandle = GCHandle.Alloc(brushProperties, GCHandleType.Pinned);

            try
            {
                this.GetHandle<ID2D1RenderTarget>().CreateLinearGradientBrush(ref linearGradientBrushProperties, brushPropertiesHandle.AddrOfPinnedObject(), gradientStopCollection.GetHandle<ID2D1GradientStopCollection>(), out linearGradientBrush);
            }
            finally
            {
                brushPropertiesHandle.Free();
            }

            return new D2D1LinearGradientBrush(linearGradientBrush);
        }
        public D2D1LinearGradientBrush CreateLinearGradientBrush(D2D1LinearGradientBrushProperties linearGradientBrushProperties, D2D1GradientStopCollection gradientStopCollection)
        {
            if (gradientStopCollection == null)
            {
                throw new ArgumentNullException("gradientStopCollection");
            }

            ID2D1LinearGradientBrush linearGradientBrush;
            this.GetHandle<ID2D1RenderTarget>().CreateLinearGradientBrush(ref linearGradientBrushProperties, IntPtr.Zero, gradientStopCollection.GetHandle<ID2D1GradientStopCollection>(), out linearGradientBrush);
            return new D2D1LinearGradientBrush(linearGradientBrush);
        }