Я написал функцию для растеризации данных обводки из InkCanvas, но по какой-то причине renderBMP.RenderAsync(...)
зависает на неопределенный срок. Любой совет?
RenderTargetBitmap rasterizePage(int pageNumber) {
if (readStrokes(pageNumber) == null) return null;
InkCanvas virtualInkCanvas = new InkCanvas();
virtualInkCanvas.Width = MainGrid.ActualWidth / 2;
virtualInkCanvas.Height = MainGrid.ActualHeight;
foreach (InkStroke stroke in readStrokes(pageNumber))
{
virtualInkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke.Clone());
}
RenderTargetBitmap renderBMP = new RenderTargetBitmap();
System.Diagnostics.Debug.WriteLine("Start Rendering page " + pageNumber.ToString());
var task = renderBMP.RenderAsync(virtualInkCanvas, (int)(MainGrid.ActualWidth / 2), (int)MainGrid.ActualHeight);
task.AsTask().Wait();
System.Diagnostics.Debug.WriteLine("Done Rendering page " + pageNumber.ToString());
return renderBMP;
}
🤔 А знаете ли вы, что...
C# обладает сборщиком мусора, который автоматически управляет памятью, что снижает риск утечек памяти.
Как сказал Теодор Зулиас, ваш синхронный вызов асинхронных методов приводит к зависанию потока, вы можете использовать ключевое слово await для замены task.AsTask().Wait();
, пожалуйста, обратитесь к следующему коду
public async Task<RenderTargetBitmap> rasterizePage(int pageNumber)
{
if (readStrokes(pageNumber) == null) return null;
InkCanvas virtualInkCanvas = new InkCanvas();
virtualInkCanvas.Width = MainGrid.ActualWidth / 2;
virtualInkCanvas.Height = MainGrid.ActualHeight;
foreach (InkStroke stroke in readStrokes(pageNumber))
{
virtualInkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke.Clone());
}
RenderTargetBitmap renderBMP = new RenderTargetBitmap();
System.Diagnostics.Debug.WriteLine("Start Rendering page " + pageNumber.ToString());
await renderBMP.RenderAsync(virtualInkCanvas, (int)(MainGrid.ActualWidth / 2), (int)MainGrid.ActualHeight);
System.Diagnostics.Debug.WriteLine("Done Rendering page " + pageNumber.ToString());
return renderBMP;
}
И для получения дополнительной информации о Документ по многопоточности и асинхронному программированию.