C# 从网络获取图片并按顺序显示

C# 从网络获取图片并按顺序显示,c#,.net,winforms,user-interface,c#-2.0,C#,.net,Winforms,User Interface,C# 2.0,我想创建一个从互联网上获取的图片的滚动列表,让用户能够点击它。如何在WinForms/C中执行此操作?是否可以将picturebox控件添加到列表框 我尝试将一个picturebox列表添加到UserControl中,并将AutoScroll设置为true,这会给我一种使用列表框的感觉,这是正确的方法吗 我还尝试将pictureBox的ImageLocation设置为图像的URI,然后调用Load()加载图像,它确实起了作用,但是我的表单冻结了!如何在不冻结表单的情况下,按顺序更新每个pictu

我想创建一个从互联网上获取的图片的滚动列表,让用户能够点击它。如何在WinForms/C中执行此操作?是否可以将picturebox控件添加到列表框

  • 我尝试将一个picturebox列表添加到UserControl中,并将AutoScroll设置为true,这会给我一种使用列表框的感觉,这是正确的方法吗

  • 我还尝试将pictureBox的ImageLocation设置为图像的URI,然后调用Load()加载图像,它确实起了作用,但是我的表单冻结了!如何在不冻结表单的情况下,按顺序更新每个picturebox

  • 谢谢,,
    Azlam

    我先回答你的第三个问题,因为这是我唯一真正知道答案的问题。图片框上有一个LoadAsync()方法,它将在单独的线程中加载图像,并且不会挂起应用程序

    至于其他问题,我也很可能从用户控件开始,并将图像放在那里。我唯一的建议是首先创建一个用户控件,该控件有一个图片框,旁边可能有一个多行文本框或richtextbox。关闭文本框上的边框,在整个控件周围有一个轻微的边框。这将允许您显示图像,旁边有一些文本。然后,实际的最终控件将只是这些控件的集合,并能够根据需要添加它们


    --我的2美分…

    你介意垂直滚动吗

    我将以DataGridView控件为基础,创建以下实现:

    1) 创建从DataGridViewImageColumn派生的自定义列和单元格类型。您可以将它们称为“CronosNetImageColumn”、“CronosNetImageCell”

    2) 创建一个类“CronosImageDetails”来保存单元格数据(包括显示文本和图像url的属性)。这将作为每个单元格的值传入。例:

    添加(新的CronosImageDetails{DisplayText=“海滩上的一天”,ImageURL=”http://...beach.jpg" });

    3) 重写单元格绘制()以使用WebClient获取图像,并使用e.Graphics.DrawImage(ImageAcquiredFromWebClient)将图像绘制到单元格。您可以使用e.Graphics.DrawString((CronosImageDetails)value.DisplayText,…)覆盖单元格中的文本

    此快速解决方案将为您提供一个滚动图像列表,该列表仅在用户滚动列表时加载图像,并为改进提供坚实的基础

    建议进一步优化:

    A) 为绘制单元数据创建backbuffer位图和图形

    B) 设置Paint()以简单地绘制backbuffer,而不是进行获取图像的工作

    C) 创建一个新的单元格方法LoadImage(),该方法生成一个新线程,用于下载图像并将其绘制到后缓冲区

    D) 让Paint()(或单独的辅助线程)跟踪滚动的方向和加速度,并估计哪些单元格需要预加载。在这些单元格上触发LoadImage()

    E) 使用加载图像初始化每个单元格的后缓冲区


    F) 跟踪并使用图像加载时间的经验数据来帮助确定哪些单元格需要预加载。

    谢谢,让我试试loadAsync()方法,我正是按照您提到的方法来做的。这种方法是否需要将基本控件放置在类似MDI的应用程序中?它能防止应用程序冻结吗?