【问题标题】:UWP code : using "await" in "Dispatcher"UWP 代码:在“调度程序”中使用“等待”
【发布时间】:2018-05-06 01:51:54
【问题描述】:
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High,async () =>
{
    await MainPage.bmpsource.SetBitmapAsync(bmp);
});

我将代码放在while循环中。当我单击按钮或正在运行的应用程序上的某些控件时,应用程序将崩溃并精确定位到代码“await MainPage.bmpsource.SetBitmapAsync(bmp);”。

VS 输出:
System.Private.CoreLib.ni.dll 中将出现“System.Threading.Tasks.TaskCanceledException”类型的异常,但未在用户代码中处理 任务已取消。

也许有人可以帮助我,谢谢!

【问题讨论】:

  • 在新任务而非 UI 中循环时
  • await for RunAsync of an async lambda 不会等到 lambda 完成;它只会等到RunAsync 完成它的工作。如果您想等待 lambda 完成,您通常会使用 TaskCompletionSource 并手动完成它。

标签: windows uwp win-universal-app windows-10-universal uwp-xaml


【解决方案1】:

您不应使用CoreDispatcherPriority.High,因为这可能会导致问题(并且可能会导致此问题)。

请查看上面的链接以获取有关此问题的更多信息。

【讨论】:

  • 我的应用程序用于显示来自物联网相机的连续图像。我使用 Camera API 在一个带有 fetch 循环的新任务中获取像素数据。当我得到一个图像帧像素数据时,我使用 eventhandler 来通知 UI 创建 softwarebitmapsource 和 ImageControl.source = softwarebitmapsource。如果我不使用 High,显示的帧率将从 35 fps 降低到 30 fps。那么,您有什么想法可以帮助我显示连续图像,并使图像控件看起来像播放视频。
  • 你试过用CaptureElement吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多