示例#1
0
        private void DownloadTiles(object args)
        {
            var downloadFinished = args as ManualResetEvent;

            // Loop through the tiles, and filter tiles that are already on disk.
            var downloadTiles = new List <TileInfo>();

            for (var i = 0; i < _tiles.ToList().Count; i++)
            {
                if (!_fileCache.Exists(_tiles[i].Index))
                {
                    downloadTiles.Add(_tiles[i]);
                }
                else
                {
                    // Read tiles from disk
                    var name = _fileCache.GetFileName(_tiles[i].Index);

                    // Determine age of tile...
                    var fi = new FileInfo(name);
                    if ((DateTime.Now - fi.LastWriteTime).Days <= _tileTimeOut)
                    {
                        continue;
                    }
                    File.Delete(name);
                    downloadTiles.Add(_tiles[i]);
                }
            }

            Logger.Debug("Number of download tiles:" + downloadTiles.Count);

            if (downloadTiles.Count > 0)
            {
                // 2. Download tiles...
                //var doneEvents = new ManualResetEvent[downloadTiles.Count];
                var doneEvents = new MultipleThreadResetEvent(downloadTiles.Count);

                foreach (var t in downloadTiles)
                {
                    object o = new object[] { t, doneEvents };
                    ThreadPool.SetMaxThreads(25, 25);
                    ThreadPool.QueueUserWorkItem(DownloadTile, o);
                }

                doneEvents.WaitAll();
                Logger.Debug("End waiting for remote tiles...");
            }
            if (downloadFinished != null)
            {
                downloadFinished.Set();
            }
        }
        private void DownloadTiles(object args)
        {
            var downloadFinished = args as ManualResetEvent;

            // Loop through the tiles, and filter tiles that are already on disk.
            var downloadTiles = new List<TileInfo>();
            for (var i = 0; i < _tiles.Count(); i++)
            {
                if (!_fileCache.Exists(_tiles[i].Index))
                {
                    downloadTiles.Add(_tiles[i]);
                }
                else
                {
                    // Read tiles from disk
                    var name = _fileCache.GetFileName(_tiles[i].Index);

                    // Determine age of tile...
                    var fi = new FileInfo(name);
                    if ((DateTime.Now - fi.LastWriteTime).Days <= _tileTimeOut) continue;
                    File.Delete(name);
                    downloadTiles.Add(_tiles[i]);
                }
            }

            if (downloadTiles.Count > 0)
            {
                int count = 1;
                int allCount = 100;
                while ((count - 1) * allCount < downloadTiles.Count)
                {
                    try
                    {
                        int temp = allCount;
                        if (count*allCount > downloadTiles.Count)
                            temp = downloadTiles.Count - (count - 1)*allCount;
                        var doneEvents = new MultipleThreadResetEvent(temp);
                        ThreadPool.SetMaxThreads(25, 25);
                        for (int i = 0; i < temp; i++)
                        {
                            TileInfo t = downloadTiles[(count - 1)*allCount + i];
                            object o = new object[] {t, doneEvents};
                            ThreadPool.QueueUserWorkItem(DownloadTile, o);
                        }
                        doneEvents.WaitAll();
                        doneEvents.Dispose();
                        //Thread.Sleep(10);
                        count++;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("下载异常:" + ex.Message);
                    }
                }
            }

            if (downloadFinished != null) downloadFinished.Set();
        }
示例#3
0
        private void DownloadTiles()
        {
            var downloadTiles = new List<TileInfo>();
            for (var i = 0; i < _tiles.Count(); i++)
            {
                if (!fileCache.Exists(_tiles[i].Index))
                {
                    downloadTiles.Add(_tiles[i]);
                }
            }

            if (downloadTiles.Count == 0)
            {
                MessageBox.Show("已经存在缓存文件,不需要缓存");
                return;
            }

            var diare = MessageBox.Show("一共需要下载" + downloadTiles.Count + "张切片,是否继续?", "下载地图", MessageBoxButtons.OKCancel);
            if (diare == DialogResult.Cancel)
                return;

            progressBar1.Minimum = 0;
            progressBar1.Maximum = downloadTiles.Count;
            progressBar1.Value = 0;
            progressBar1.Step = 50;

            if (downloadTiles.Count > 0)
            {
                int count = 1;
                int allCount = 50;
                ThreadPool.SetMaxThreads(100, 100);
                while ((count - 1)*allCount < downloadTiles.Count)
                {
                    try
                    {
                        int temp = allCount;
                        if (count*allCount > downloadTiles.Count)
                            temp = downloadTiles.Count - (count - 1)*allCount;
                        var doneEvents = new MultipleThreadResetEvent(temp);
                        for (int i = 0; i < temp; i++)
                        {
                            TileInfo t = downloadTiles[(count - 1)*allCount + i];
                            object o = new object[] {t, doneEvents};

                            ThreadPool.QueueUserWorkItem(DownloadTile, o);
                        }

                        int wt;
                        int ct;
                        ThreadPool.GetAvailableThreads(out wt, out ct);
                        if (wt < 15)
                        {
                            Thread.Sleep(5000);
                            continue;
                        }

                        doneEvents.WaitAll();
                        doneEvents.Dispose();
                        //Thread.Sleep(10);
                        progressBar1.PerformStep();
                        label4.Text = (allCount*count).ToString() + "/" + downloadTiles.Count;
                        Application.DoEvents();
                        count++;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("下载异常:" + ex.Message);
                    }
                }
                MessageBox.Show("下载完毕!");
            }
        }
示例#4
0
        private void DownloadTiles(object args)
        {
            var downloadFinished = args as ManualResetEvent;

            // Loop through the tiles, and filter tiles that are already on disk.
            var downloadTiles=new List<TileInfo>();
            for (var i = 0; i < _tiles.ToList().Count; i++)
            {
            /*                if (!_fileCache.Exists(_tiles[i].Index))
                {*/
                    downloadTiles.Add(_tiles[i]);
                //}
                //else
                //{
                //    // Read tiles from disk
                //    //var name = _fileCache.GetFileName(_tiles[i].Index);

                //    // Determine age of tile...
                //    //var fi = new FileInfo(name);
                //    //if ((DateTime.Now - fi.LastWriteTime).Days <= _tileTimeOut) continue;
                //    //File.Delete(name);
                //    downloadTiles.Add(_tiles[i]);
                //}
            }

            Logger.Debug("Number of download tiles:" + downloadTiles.Count);

            if (downloadTiles.Count > 0)
            {
                // 2. Download tiles...
                //var doneEvents = new ManualResetEvent[downloadTiles.Count];
                var doneEvents = new MultipleThreadResetEvent(downloadTiles.Count);

                foreach (var t in downloadTiles)
                {
                    object o = new object[] {t, doneEvents};
                    ThreadPool.SetMaxThreads(100, 100);
                    ThreadPool.QueueUserWorkItem(DownloadTile, o);
                }

                doneEvents.WaitAll();
                Logger.Debug("End waiting for remote tiles...");
            }
            if (downloadFinished != null) downloadFinished.Set();
        }