首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP RenderTargetBitmap.RenderAsync挂起

UWP RenderTargetBitmap.RenderAsync挂起
EN

Stack Overflow用户
提问于 2022-05-17 19:45:19
回答 1查看 43关注 0票数 1

我编写了一个函数来对来自InkCanvas的笔画数据进行栅格化,但出于某种原因,renderBMP.RenderAsync(...)无限期挂起。有什么建议吗?

代码语言:javascript
复制
    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;

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-18 02:33:35

正如西奥多·祖利亚斯所说,同步调用异步方法使线程卡住,您可以使用“等待”关键字来修复task.AsTask().Wait();,请参阅以下代码

代码语言:javascript
复制
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;    
}

并获得更多关于线程和异步编程文档的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72279845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档