【发布时间】:2021-10-27 09:36:15
【问题描述】:
我需要在一个列表中加载并显示多个图像。想象一个“相册”列表,每个相册都包含多张图片 - 我想显示这些相册的列表以及前 4 张图片的缩略图。
如果我将图像作为普通 URL,我可以简单地创建字符串属性,设置 URL 并将它们在 XAML 中绑定到图像的源。该框架将处理图像的加载、渲染和可能的缓存。
但我有从流中加载图像的技术要求,即通过特定逻辑获取图像。我现在正在努力解决如何在我的 ViewModel 中提供 Streams,以便 View 只加载要显示的 Image-Streams 并以有效的方式执行此操作。我设法通过在 ViewModel 中创建 BitmapImages 并使用相应的流调用它们的 SetSourceAsync-Method 来做到这一点。但我要么陷入线程问题(似乎只允许由 UI 线程创建 BitmapImage),要么在从我的流中加载图像时应用程序在 Android 上出现口吃。似乎加载仍在 UI 线程上完成。
有人有处理这个问题的好方法吗?我什至会欣赏这些流的某种缓存。
提前谢谢你!
亲切的问候,
TopperDEL
*** 2021 年 9 月 1 日更新 *** 我设法通过使用 Skiasharp 渲染位图来解决这个问题。基本上我创建了一个用户控件,其中包括一个 Skiasharp“SKXamlCanvas”。一旦我得到我的流,我创建一个 SKBitmap 并在 Canvas 上绘制它。到目前为止,我还没有遇到任何问题。
代码可以看这里:Github
【问题讨论】:
-
您是否考虑过在视图模型中使用
Worker或Coroutine? -
(a BitmapImage is only allowed to be created by a UI-thread难以置信,因为它没有 gui 元素。但是把它放在一个视图中应该在 ui 线程上完成。 -
是的,但这是真的 - 如果我尝试在不是 UI 线程的异步方法中创建 BitmapImage,它会因“错误线程”而崩溃(我这里只有德语错误消息) .
-
Ethan,你能详细说明一下你的意思吗?
标签: c# android ios uwp uno-platform