使 WPF 图像加载异步

2024-01-09

我想加载 Gravatar-Images 并将它们从代码隐藏设置为 WPF Image-Control。 所以代码看起来像

imgGravatar.Source = GetGravatarImage(email);

GetGravatarImage 看起来像:

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri( GravatarImage.GetURL( "http://www.gravatar.com/avatar.php?gravatar_id=" + email) , UriKind.Absolute );
bi.EndInit();
return bi;

不幸的是,当网络连接速度较慢时,这会锁定 GUI。有没有办法分配图像源并让它在后台加载图像而不阻塞 UI?

Thanks!


我建议您在 XAML 中的 imgGravatar 上使用 Binding。放IsAsync=true其上,WPF 将自动利用线程池中的线程来提取图像。您可以将解析逻辑封装到 IValueConverter 中,然后简单地将电子邮件绑定为源

in XAML:

<Window.Resouces>
    <local:ImgConverter x:Key="imgConverter" />
</Window.Resource>

...


<Image x:Name="imgGravatar" 
       Source="{Binding Path=Email, 
                        Converter={StaticResource imgConverter}, 
                        IsAsync=true}" />

in Code:

public class ImgConverter : IValueConverter
{
    public override object Convert(object value, ...)
    {
        if (value != null)
        {
             BitmapImage bi = new BitmapImage();
             bi.BeginInit();
             bi.UriSource = new Uri( 
                 GravatarImage.GetURL(
                     "http://www.gravatar.com/avatar.php?gravatar_id=" + 
                      value.ToString()) , UriKind.Absolute 
                 );
             bi.EndInit();
             return bi;                
        }
        else
        {
            return null;
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 WPF 图像加载异步 的相关文章

  • WPF 通过宽高比调整 UserControl 的大小

    我有一个 UserControl 并且该 UserControl 必须根据宽高比调整大小 这意味着 宽度 高度 2 1 目前我正在使用这段代码 protected override Size ArrangeOverride Size arr
  • 列表框仅显示一项

    我有一个ListBox和一个带有字符串的类 每次用户单击应用程序中的添加按钮时 我都会创建该类的一个新实例并将其添加到绑定到的列表中ListBox 第一次单击 添加 按钮时 列表框显示第一项 但下次单击时不再显示两项 XAML 这是List
  • async/await 可以了解 Android Activity 生命周期吗?

    我一直想知道如何使用 async await 在 Android 上生成响应式 UI 我一直在围绕异步函数使用一个简单的 pub sub 包装服务 这是相当多的样板文件 但可以工作 但我对此感到很痒 这告诉我应该有更好的方法 对包装服务的需
  • WPF RichTextBox 中的只读 Run 元素?

    我可能完全是在想象这一点 但我可以发誓有一种方法可以使 RichTextBox 中的各个 Run 或 Parapgraph 元素成为只读 我还可以发誓 几周前我自己尝试了一种方法 并对结果感到满意 我隐约记得它看起来像这样
  • DropDelegate Safari 拖动图像

    我正在尝试实施DropDelegate模式以允许将图像拖到我的视图中并加载它们 这对于取景器中的图像效果很好 但是当将图像从 safari 拖到我的视图中时 这不起作用 我注意到typeIdentifier or UTType所提供的信息
  • 将字节转换为图像 ASP.NET c# 并在 Image1.Url 中使用它

    我有一个 WEB APP 它是一个网络摄像头应用程序 它拍摄图像并以字节形式存储到数据库中 话虽这么说 我也不想保存拍摄的图像并将其保存在任何类型的文件夹中现在 显示捕获的图像以供我保存并再次查看的唯一方法是 我有一个在单击捕获图像时触发的
  • 访问 ControlTemplate 内的控件

    这是 xaml
  • 如何将路径添加到剪辑路径

    当尝试向图像添加波浪效果时 我陷入困境 这两个 SVG 一个包含我尝试实现的路径 第二个的行为符合预期 但剪辑路径 形状错误 当我粘贴到所需的路径时 它不起作用 为什么以及如何才能完成这项工作 期望的路径
  • 在php中将png合并到多边形上

    我很困惑 我尝试简单地绘制一个多边形并放在上面 就像一个带有透明度的 png 图层一样 没有任何成功 一次背景是黑色的 一次多边形变得不可见 这是我的 php 代码 header Content type image png The png
  • 给 MVVM 中的 View 一些命令

    假设我有一些用户控制权 用户控件有一些子窗口 用户控制用户想要关闭某种类型的子窗口 用户控制代码后面有一个方法 public void CloseChildWindows ChildWindowType type 但我无法调用此方法 因为我
  • Python 多处理map_async

    我想跳过从以下位置返回的结果map async http docs python org 2 library multiprocessing html multiprocessing pool multiprocessing Pool ma
  • 使用 C# 从 UIElement 截取 WPF 屏幕截图 JPG

    我正在尝试从我的 WPF 应用程序的一部分创建 JPG 就像截图一样 只是个人的UIElements 我从这里开始 http www grumpydev com 2009 01 03 take wpf screenshots http ww
  • 如何重新启动 WPF 应用程序?

    如何从代码重新启动 WPF 应用程序 在 Windows 窗体中存在 Application Restart 但出于某种原因 Microsoft 决定不在 WPF 中添加此方法 我讨厌 WPF 和 Windows 窗体之间的不兼容 喜欢 w
  • 当其中一项任务失败时,是否有可能从 Task.WhenAll 获得成功结果? [复制]

    这个问题在这里已经有答案了 鉴于以下情况 var tPass1 Task FromResult 1 var tFail1 Task FromException
  • CanExecute 何时被调用?

    在演示中 我有一个按钮可以切换布尔字段isAsking 我创建了一个命令 该命令仅在以下情况下执行isAsking true 一旦我按下切换按钮 okButton IsEnable立即更改 这表明该命令发现了更改isAsking 我感到很困
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • wpf自定义控件:另一个矩形内的可拖动/可调整大小的矩形

    我正在研究一个带有两个矩形的控件 一个在另一个矩形内 我希望用户能够拖动内部矩形 调整其大小 如果可能的话 也可以在外部矩形的边界内旋转它 这些值应该是可绑定的 以便我可以在更新时将这些值存储在我的数据源中 是否已经有这样的控件或者有人有任
  • Celery未注册任务KeyError

    我通过在终端中执行以下命令来启动工作程序 celery A cel test worker loglevel INFO concurrency 10 n worker1 h 然后我收到一条长循环错误消息 指出 celery 已收到未注册的任
  • 将异步调用变成同步调用

    将异步调用转变为同步有什么好的实践 模式 吗 我有一个第三方库 它的方法都是异步的 要获得几乎任何方法的结果 您必须侦听事件 这将带来一些上下文 基本上它看起来像 service BeginSomething service OnBegin
  • XAML:如何定义要在多个项目中使用的数据模板和样式

    我开始使用 WPF net 3 5 sp1 仅使用 VS 尚未混合 开发桌面应用程序 我现在的情况是 我在几个库中有一些通用的可重用组件 我可以在哪里定义样式和数据模板 以便它们可以在多个项目中重复使用 从而获得一致的外观和感觉 我看过 R

随机推荐

  • 如何防止在堆上创建对象?

    有谁知道如何在独立于平台的 C 代码中阻止在堆上创建对象 也就是说 对于 Foo 类 我想阻止用户这样做 Foo ptr new Foo 并且只允许他们这样做 Foo myfooObject 有人有什么想法吗 Cheers 尼克的回答 ht
  • 使用 Haskell 播放 wav 文件

    有没有一种简单 直接的方法可以使用某些库从 Haskell 播放 WAV 文件 并且可能使我可以一次播放许多声音 我知道 OpenAL 但我不是在编写一些高级音频合成程序 我只是想播放一些声音来进行一些小游戏 理想情况下 API 可能类似于
  • 如何使用 NX/Nrwl 为 Angular 创建应用程序特定配置?

    所以我有以下项目结构 apps car libs app car shared config 对于每个应用程序 我想提供不同的配置 可以在分组库中使用 export interface DefaultAppConfig language s
  • 如何让按钮看起来就像被按下一样?

    使用 VS2008 C Net 2 和 Winforms 如何使常规按钮看起来 按下 想象一下这个按钮是一个开 关开关 ToolStripButton有 Checked 属性 但常规 Button 没有 您可以用来获取此选项的一种方法是放置
  • ListFragment 的 FragmentPagerAdapter getItem 错误

    我看了很多代码 但无法弄清楚这一点 http developer android com reference android support v4 app FragmentPagerAdapter html http developer a
  • Hibernate 实体有一个通用基类吗?

    Hibernate 实体是否有一个通用基类 即具有 id 版本和其他通用属性的 MappedSuperclass 有什么缺点吗 Example MappedSuperclass public class BaseEntity private
  • 递归解析关联数组时如何检查 PHP 中的循环引用?

    我用循环引用创建了这个数组 arr array 1 gt one 2 gt two arr 3 arr 我有一个函数可以递归地打印出数组中的值 但我确实无法解决创建循环引用检查的问题 你怎么能这么做呢 我用于打印数组的当前函数复制如下 我没
  • 这个JSON的数据结构是怎样的?

    我试图使用 Gson 将 Json 解析为 Java 但是当我使用 fromJson 时 我总是得到 null 谁能帮我解释一下这个数据结构 谢谢 d results metadata uri https api datamarket az
  • 有没有办法用 Java 下载 Microsoft Azure 数据中心 IP 范围?

    我的问题类似于有没有办法以编程方式自动下载 Microsoft Azure 使用的最新 IP 范围 https stackoverflow com questions 28798014 ms azure automatically down
  • Tesseract 虚假空间识别

    我正在使用 tesseract 来识别序列号 这是可以接受的 存在常见问题 例如错误识别零和 O 6 和 5 或 M 和 H 除此之外 这个超正方体还向识别的单词添加了空格 而图像中没有空格 下图被识别为 HI 3H 这张图片的结果是 FB
  • opencv clahe参数解释

    我想知道 clahe 参数的正确解释i e clipLimit and tileGridSize 以及如何clipLimit值会影响图像的对比度以及选择时要考虑的因素 例如图像分辨率 物体尺寸 tileGridSize 提前致谢 这个问题是
  • MFMailComposeViewController 错误 [MC] 过滤邮件表帐户的捆绑包 ID

    我使用发送消息的标准功能MFMailComposeViewController My code if MFMailComposeViewController canSendMail let mail MFMailComposeViewCon
  • 在 GoDaddy 上安装 django 网站 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我以前从未部署过 Django 网站 我目前正在寻找在我的豪华 GoDaddy 帐户中进行设置 有人有
  • Rails - 删除满足条件的所有记录

    你如何以 Rails 方式编写 我有一个模型 经理 我想从 Managers 中删除满足 manager level 为 5 条件的所有记录 谢谢 我认为最好使用destroy而不是delete 因为 destroy 将从数据库中删除当前对
  • matplotlib Axes3D 中的 mayavi 3d 对象

    有时我发现自己对 matplotlib 的 mplot3d 中缺少某些渲染功能感到沮丧 在大多数情况下 我确实发现我可以在 mayavi 中得到我想要的东西 但如果只是为了美观 比如 LaTeX 化的标签以及与我的其他图形的视觉一致性 那么
  • 打印 10GB 文件的唯一行

    我有一个 10GB 的文件 有 2 亿行 我需要获取该文件的唯一行 My code while lt gt chomp tmp 1 print 我只有2GB内存 我怎么解决这个问题 正如我对大卫的回答发表评论时 数据库是可行的方法 但一个好
  • 迁移:t.references 不允许指定索引名称

    我在迁移中有以下内容 create table model with a long name do t t references other model with an equally long name index true end 这会
  • 如何对静态方法进行猴子修补? [复制]

    这个问题在这里已经有答案了 虽然将实例方法猴子补丁到类中相当简单 例如 class A object pass def a self print a A a a 与另一个班级一起做这个 staticmethod la class B obj
  • 在C#中将图像插入RTF文档

    我正在创建一个可以轻松插入图像的 RichTextBox 子类 我提到这个问题 https stackoverflow com questions 542850 how can i insert an image into a richte
  • 使 WPF 图像加载异步

    我想加载 Gravatar Images 并将它们从代码隐藏设置为 WPF Image Control 所以代码看起来像 imgGravatar Source GetGravatarImage email GetGravatarImage