Exemple #1
0
        private void DownloadSelectedPictures(List <Picture> toProcess)
        {
            //validate that there are actually pictures to be processed (search may return 0 results, or very few results)
            if (toProcess.Count > 0)
            {
                //download the new pictures, wait for them to all finish
                ManualResetEvent[] manualEvents = new ManualResetEvent[toProcess.Count];

                // Queue the work items that create and write to the files.
                for (int i = 0; i < toProcess.Count; i++)
                {
                    manualEvents[i] = new ManualResetEvent(false);

                    ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state)
                    {
                        object[] states = (object[])state;

                        ManualResetEvent mre = (ManualResetEvent)states[0];
                        Picture p            = (Picture)states[1];

                        PictureDownload pd = DownloadManager.Current.GetPicture(p, false);

                        //hook events and set mre in event
                        PictureDownload.PictureDownloadEvent pdEvent = new PictureDownload.PictureDownloadEvent(
                            delegate(PictureDownload t)
                        {
                            mre.Set();
                        });

                        //on success or failure make sure to set mre
                        pd.PictureDownloaded         += pdEvent;
                        pd.PictureDownloadingAborted += pdEvent;

                        DownloadManager.Current.QueuePicture(pd);
                    }), new object[] { manualEvents[i], toProcess[i] });
                }

                //wait for all items to finish
                //3 minute timeout
                WaitHandle.WaitAll(manualEvents, 3 * 60 * 1000);

                CurrentPictures.AddRange(toProcess);
            }
        }
Exemple #2
0
        private void DownloadSelectedPictures(List<Picture> toProcess)
        {
            //validate that there are actually pictures to be processed (search may return 0 results, or very few results)
            if (toProcess.Count > 0)
            {
                //download the new pictures, wait for them to all finish
                ManualResetEvent[] manualEvents = new ManualResetEvent[toProcess.Count];

                // Queue the work items that create and write to the files.
                for (int i = 0; i < toProcess.Count; i++)
                {
                    manualEvents[i] = new ManualResetEvent(false);

                    ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object state)
                    {
                        object[] states = (object[])state;

                        ManualResetEvent mre = (ManualResetEvent)states[0];
                        Picture p = (Picture)states[1];

                        PictureDownload pd = DownloadManager.Current.GetPicture(p, false);

                        //hook events and set mre in event
                        PictureDownload.PictureDownloadEvent pdEvent = new PictureDownload.PictureDownloadEvent(
                                delegate(PictureDownload t)
                                {
                                    mre.Set();
                                });

                        //on success or failure make sure to set mre
                        pd.PictureDownloaded += pdEvent;
                        pd.PictureDownloadingAborted += pdEvent;

                        DownloadManager.Current.QueuePicture(pd);

                    }), new object[] { manualEvents[i], toProcess[i] });
                }

                //wait for all items to finish
                //3 minute timeout
                WaitHandle.WaitAll(manualEvents, 3 * 60 * 1000);

                CurrentPictures.AddRange(toProcess);
            }
        }