UWP rendertargetBitmap.renderasync悬挂

发布于 2025-01-30 00:54:41 字数 1014 浏览 5 评论 0原文

我写了一个函数,以从墨水canvas上栅格化数据,但是出于某种原因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;

    }

I wrote a function to rasterize stroke data from an InkCanvas, but for some reason renderBMP.RenderAsync(...) hangs indefinitely. Any advice?

    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;

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绮烟 2025-02-06 00:54:41

正如Theodor Zoulias所说,您同步呼叫异步方法使线程陷入困境,您可以使用等待关键字来repalce 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;    
}

并获得更多信息有关

As Theodor Zoulias said, you synchronous call to async methods make thread stuck, you could use await keyword to repalce task.AsTask().Wait();, please refer to the following code

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;    
}

And for getting more info about Threading and async programming document.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文