private void DownloadTiles(object args) { var downloadFinished = args as ManualResetEvent; var doneEvents = new MultipleThreadResetEvent(tileInfos.Count); foreach (var tileInfo in tileInfos) { object o = new object[] { tileInfo, doneEvents }; ThreadPool.QueueUserWorkItem(DownloadTile, o); } doneEvents.WaitAll(); 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(); } }
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("下载完毕!"); } }
static void Main(string[] args) { MultipleThreadResetEvent multiple = new MultipleThreadResetEvent(500); var ipsecs = File.ReadAllLines(Local + "ipsec.txt"); var total = ipsecs.Length; double finish = 0; foreach (var ipsec in ipsecs) { Console.WriteLine("start:" + ipsec); IpList.Clear(); var ipqueue = new Queue <string>(); var ips = ipsec.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var ip1strs = ips[0].Split('.'); var ip2strs = ips[1].Split('.'); int[] ip1 = new int[4]; int[] ip2 = new int[4]; for (int i = 0; i < 4; i++) { ip1[i] = Convert.ToInt32(ip1strs[i]); ip2[i] = Convert.ToInt32(ip2strs[i]); } while (ip1[0] * 1000000000 + ip1[1] * 1000000 + ip1[2] * 1000 + ip1[3] <= ip2[0] * 1000000000 + ip2[1] * 1000000 + ip2[2] * 1000 + ip2[3]) { var ip = ip1[0] + "." + ip1[1] + "." + ip1[2] + "." + ip1[3]; ipqueue.Enqueue(ip); ip1[3]++; if (ip1[3] == 256) { ip1[3] = 1; ip1[2]++; } if (ip1[2] == 256) { ip1[2] = 1; ip1[1]++; } if (ip1[1] == 256) { ip1[1] = 1; ip1[0]++; } if (ip1[0] == 256) { break; } } multiple.SetCurrent(500); for (int i = 0; i < 500; i++) { new Thread(() => { while (ipqueue.Count > 0) { Monitor.Enter(ipqueue); if (ipqueue.Count > 0) { var ip = ipqueue.Dequeue(); Monitor.Exit(ipqueue); Scanner scanner = new Scanner(ip, port); scanner.Scan(); } else { Monitor.Exit(ipqueue); } } multiple.SetOne(); }).Start(); } multiple.WaitAll(); GrepIps(tnum); Console.WriteLine("GrepIps Finished"); Attack(tnum); Console.WriteLine("Attack Finished"); TryLogin(tnum); Console.WriteLine("TryLogin Finished"); Implant(tnum); Console.WriteLine("Implant Finished"); finish++; Console.WriteLine(finish / total * 100.0); Thread.Sleep(5000); } multiple.Dispose(); Console.WriteLine("Finished"); Console.ReadKey(); Console.ReadKey(); }