2

このコードでは、すべての画像が読み込まれるまで待機する必要があります。ユーザーが待つ必要がないように、これらの画像を非同期的にリストボックスにロードしたいと考えています。それ、どうやったら出来るの?

    public photos()
    {
        InitializeComponent();
        refreshView();
    }

    private void refreshView()
    {
        string[] fileNames = storage.GetFileNames();
        for (int i = 0; i < fileNames.Length; i++)
        {
            image = new Image();
            FileStream jpegStream = storage.OpenFile(fileNames[i], FileMode.Open, FileAccess.Read);
            image.Source = PictureDecoder.DecodeJpeg(jpegStream, 200, 200);
            jpegStream.Dispose();
            photoList.Items.Add(image);
        }
    }
4

1 に答える 1

3

を使用できますBackgroundWorker

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (o, args) =>
    {
        //now you have a choice: get all images and add when all are retrieved,
        //or get images asynchronously here too...
        //probably best to do the latter:

        string[] fileNames = storage.GetFileNames();
        Parallell.ForEach(fileNames, file =>
        {
            Image image = new Image();
            using(FileStream jpegStream = storage.OpenFile(fileNames[i], FileMode.Open, FileAccess.Read))
            {
                image.Source = PictureDecoder.DecodeJpeg(jpegStream, 200, 200);
            }
            Dispatcher.BeginInvoke(() => photoList.Items.Add(image));
        }
    };
bw.RunWorkerAsync();
于 2013-05-22T15:10:56.883 に答える