C#,线程,内存

时间:2016-11-05 15:43:54

标签: c# multithreading memory

今天我想知道如何将图像保存到Stream(实际上在内存中我可能没有使用适当的术语)并从另一个Thread中读取它。

要做到这一点,我想继续这些步骤: A - 在第一个线程中:     1 - 从文件创建图像对象(System.Drawing)     2 - 创建缩略图     3 - 将缩略图保存到Stream(System.IO)     4 - 将Stream对象发送到第二个Thread。

B - 在第二个线程中:     1 - 从第一个线程接收流     2 - 使用此Stream创建BitmapImage对象     3 - 在UI上显示。 (WPF)

THKS。

1 个答案:

答案 0 :(得分:0)

我已经检索了部分代码,并向您展示了我的所作所为:

在检查某些文件夹中的图像的线程中:

public void CreateImgObj(object sender)
{
    try
    {
        FileStream fs = File.Open((string)sender, FileMode.Open);
        Bitmap dImg = new Bitmap(fs);
        MemoryStream ms = new MemoryStream();
        dImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        BitmapImage bi_img = new BitmapImage();
        bi_img.BeginInit();
        bi_img.StreamSource = new MemoryStream(ms.ToArray());
        bi_img.EndInit();
        evt_send_img(bi_img);
    }
    catch (Exception e)
    {
        evt_error(e);
    }
}

在UI线程中:

    private void img_recieve(object sender)
    {
        try
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                 {
                     items.Add(new Img { Img_In = (BitmapImage)sender });
                 }));
        }
        catch (Exception e)
        {
            messageerreur(e);
        }
    }

注意:" img_recieve"由" evt_send_img";

执行

THKS