【问题标题】:Executing the foreach block at the same time for all items?对所有项目同时执行 foreach 块?
【发布时间】:2018-05-16 07:13:54
【问题描述】:

我有这个 foreach 循环可以更改四个图像的图像源(在 Xamarin Forms 应用中):

int i = 0;
            Device.StartTimer(TimeSpan.FromMilliseconds(50), () =>
            {
                i ++;
                foreach (var img in imgs)
                {
                    img.Source = $"radial{i}.png";
                }
                if (i == 5)
                    i = 0;
                return true;
            });

但结果是四个图像没有同时变化,动画不流畅。这里的网格分为四个季度,每个季度都有自己的图像视图:

当我使用FromSeconds(1)而不是FromMilliseconds(200)时,动画变得更加流畅

这些是我使用的图像,当我想画一个完整的圆时我会旋转它们:

【问题讨论】:

  • 你不想等待 1 秒?
  • 请更新您的帖子以显示每张图片,以便我们了解动画应该的样子。
  • 我用图片更新了它
  • 为什么把图片分成四等份?为什么不只使用一张图片?
  • 您需要一个同时绘制四个位图的解决方案。在不了解底层技术的情况下,我根本不相信这是可能的。渲染本质上是单线程的,因此每个图像将始终一个接一个地绘制。在计算机游戏和其他类似应用程序中,您使用后台缓冲区来合成新图像,然后将其 blit 到屏幕上以解决此问题,但这对于您正在尝试做的事情似乎有点过头了。

标签: c# foreach xamarin.forms


【解决方案1】:

您可以尝试使用 System.Collections.Concurrent 并使用

调用您的循环
Parallel.ForEach(imgs, img => {
    img.Source = $"radial{i}.png";
});

但是从您想要实现的目标来看,我宁愿使用 SkiaSharp 绘图插件以编程方式创建动画。

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2021-05-14
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多