Загрузка изображения асинхронно из Mysql в WPF - PullRequest
2 голосов
/ 13 ноября 2010

Я не хочу знать лучший способ асинхронной загрузки изображения из Mysql в приложении WPF.

Спасибо.

1 Ответ

2 голосов
/ 13 ноября 2010

Используйте ThreadPool для загрузки изображения из базы данных.

  • На ThreadPool поставьте в очередь загрузкуизображение из базы данных;

  • Когда изображение загружено, все еще в пуле потоков, преобразуйте изображение в ImageSource, используя BitmapFrame.Create();

  • Используя 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...