从Mysql异步加载图像到WPF

时间:2010-11-13 07:26:51

标签: .net mysql wpf xaml

我不想知道在WPF应用程序中从Mysql异步加载图像的最佳方法。

感谢。

1 个答案:

答案 0 :(得分:2)

使用ThreadPool从数据库加载图片。

  • ThreadPool上,对数据库中图像的加载进行排队;

  • 加载图片后,仍然在线程池中,使用BitmapFrame.Create()将图像转换为ImageSource;

  • 使用Dispather.Invoke,将Image属性设置为已加载的图片。

所以,像这样:

private void button1_Click(object sender, RoutedEventArgs e)
{
    ThreadPool.QueueUserWorkItem(LoadImage, new LoadImageRequest { ImageName = "Image.png", Control = image1 });
}

private void LoadImage(object state)
{
    var request = (LoadImageRequest)state;

    byte[] data = ...; // load bytes from the database using request.ImageName

    using (var stream = new MemoryStream(data))
    {
        var imageSource = BitmapFrame.Create(stream);

        Dispatcher.BeginInvoke(
            new Action<ImageSource>(p => request.Control.Source = p), imageSource
        );
    }
}

private class LoadImageRequest
{
    public string ImageName;
    public Image Control;
}