Я хочу загрузить изображение из базы данных в графическое окно, используя LoadAsync и MemoryStream - PullRequest
2 голосов
/ 29 августа 2011

У меня есть изображения в базе данных, которые я хочу загрузить асинхронно в графическое окно. Как бы я это сделал? Прямо сейчас у меня есть:

byte[] byteBLOBData = new byte[0];
byteBLOBData = (byte[])ds.Tables["magazine_images"].Rows[c - 1]["image"];
MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
pictureBox1.Image = Image.FromStream(stmBLOBData);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
labelMsg.Text = "Picture loaded successfully.";

И я хочу сделать:

pictureBox1.LoadAsync("What should I put here?");

Я использую базу данных MySQL и Visual Studio 2010 C #

1 Ответ

2 голосов
/ 29 августа 2011

Не загружайте байты в изображение, это побьет цель того, чего вы пытаетесь достичь ... (обратите внимание, что это быстрое занятие, чтобы вставить изображение во временный файл)здесь есть много дополнительных соображений, не последним из которых будет удаление временного файла, когда вы закончите)

byte[] byteBLOBData = (byte[])ds.Tables["magazine_images"].Rows[c - 1]["image"];
string tempImageFileName = Path.Combine(Path.GetTempPath(), Path.GetTempFileName() + ".jpg");
using( FileStream fileStream = new FileStream(tempImageFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite) ) {
    using( BinaryWriter writer = new BinaryWriter(fileStream) ) {
        writer.Write(byteBLOBData);
    }
}

pictureBox1.LoadCompleted += LoadCompleted;
pictureBox1.WaitOnLoad = false;
pictureBox1.LoadAsync(tempImageFileName);

...

private static void LoadCompleted( object sender, AsyncCompletedEventArgs e ) {
    if( e.Error != null ) {
        // will get this if there's an error loading the file
    } if( e.Cancelled ) {
        // would get this if you have code that calls pictureBox1.CancelAsync()
    } else {
        // picture was loaded successfully
    }
}

также смотритеLoadProgressChanged событие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...