В моем сценарии я хочу заморозить неизменяемый BitmapCacheBrush, прежде чем я хочу отобразить его в фоновом задании. К сожалению, я получаю сообщение об ошибке «Этот Freezable не может быть заморожен». Есть ли обходной или хакерский способ замораживания и не зависание объектов? Возможно, возможно установить нужные свойства через отражение для достижения этой цели? Спасибо, ребята, заранее.Как заморозить замороженные объекты, которые не могут быть заморожены
Edit: (Мой пример кода по запросу)
public static class ext
{
public static async Task<BitmapSource> RenderAsync(this Visual visual)
{
var bounds = VisualTreeHelper.GetDescendantBounds(visual);
var bitmapCacheBrush = new BitmapCacheBrush(visual);
bitmapCacheBrush.BitmapCache = new BitmapCache();
// We need to disconnect the visual here to make the freezable freezable :). Of course this will make our rendering blank
//bitmapCacheBrush.Target = null;
bitmapCacheBrush.Freeze();
var bitmapSource = await Task.Run(() =>
{
var renderBitmap = new RenderTargetBitmap((int)bounds.Width,
(int)bounds.Height, 96, 96, PixelFormats.Pbgra32);
var dVisual = new DrawingVisual();
using (DrawingContext context = dVisual.RenderOpen())
{
context.DrawRectangle(bitmapCacheBrush,
null,
new Rect(new Point(), new Size(bounds.Width, bounds.Height)));
}
renderBitmap.Render(dVisual);
renderBitmap.Freeze();
return renderBitmap;
});
return bitmapSource;
}
}
Я думаю, что это мое любимое название вопроса до сих пор. –
Я ничего не знаю о C# и друзьях, но заголовок такой приятной загадки! он бьет по дереву. И, следуя духу, ответ: «Вы не можете заморозить замороженные объекты, которые не могут быть заморожены!» – SergeyA
Спросите Эльсу, чтобы помочь :) – Guy