From becbb9e21d1edda3944c844d2d432c581edd1084 Mon Sep 17 00:00:00 2001 From: Alex Maitland Date: Sat, 2 Sep 2023 19:24:32 +1000 Subject: [PATCH] WPF - Exception on wakeup from sleep Issue #4426 --- .../Rendering/WritableBitmapRenderHandler.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs b/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs index b0f14f2f63..d914469bbd 100644 --- a/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs +++ b/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs @@ -160,6 +160,14 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt return; } + var sourceBufferPtr = sourceBuffer.DangerousGetHandle(); + + // Issue https://github.com/cefsharp/CefSharp/issues/4426 + if (sourceBufferPtr == IntPtr.Zero) + { + return; + } + //By default we'll only update the dirty rect, for those that run into a MILERR_WIN32ERROR Exception (#2035) //it's desirably to either upgrade to a newer .Net version (only client runtime needs to be installed, not compiled //against a newer version. Or invalidate the whole bitmap @@ -169,7 +177,7 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt var sourceRect = new Int32Rect(dirtyRect.X, dirtyRect.Y, dirtyRect.Width, dirtyRect.Height); bitmap.Lock(); - bitmap.WritePixels(sourceRect, sourceBuffer.DangerousGetHandle(), noOfBytes, stride, dirtyRect.X, dirtyRect.Y); + bitmap.WritePixels(sourceRect, sourceBufferPtr, noOfBytes, stride, dirtyRect.X, dirtyRect.Y); bitmap.Unlock(); } else @@ -178,7 +186,7 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt var sourceRect = new Int32Rect(0, 0, width, height); bitmap.Lock(); - bitmap.WritePixels(sourceRect, sourceBuffer.DangerousGetHandle(), noOfBytes, stride); + bitmap.WritePixels(sourceRect, sourceBufferPtr, noOfBytes, stride); bitmap.Unlock(); } }