static void Main(string[] args) { SetUpWorkingFolder(); int idx = int.Parse(args[0]); MinLat = 43; // MinLatStart[idx]; MaxLat = 48; // Math.Min(89, MinLat + 59); _elevations = new decimal[1 + MaxLon - MinLon, 1 + MaxLat - MinLat]; for (int lat = MaxLat; lat >= MinLat; lat--) { int evtIdx = _waitEvents.Count; ManualResetEvent evt = new ManualResetEvent(false); _waitEvents.Add(evt); ThreadStartArgs tsa = new ThreadStartArgs(); tsa.waitEvent = evt; tsa.lat = lat; ThreadPool.QueueUserWorkItem(ThreadedRead, tsa); } if (_waitEvents != null) { ManualResetEvent.WaitAll(_waitEvents.ToArray()); } StringBuilder sb = new StringBuilder(); for (int lat = MaxLat; lat >= MinLat; lat--) { string line = ""; for (int lon = MinLon; lon <= MaxLon; lon++) { int i = (lon - MinLon); int j = (MaxLat - lat); line += string.Format("{0:0000},", _elevations[i, j]); } sb.AppendLine(line.TrimEnd(',')); } string fileName = string.Format("scElevationMap_{0}", idx); File.WriteAllText(Path.Combine(WorkFolder, fileName), sb.ToString()); Console.WriteLine("Done - press any key to exit."); Console.Read(); }
private static void ThreadedRead(object state) { ThreadStartArgs tsa = state as ThreadStartArgs; if (tsa != null) { using (WebClient wc = new WebClient()) { for (int lon = MinLon; lon <= MaxLon; lon++) { ReadData(wc, tsa.lat, lon); } } tsa.waitEvent.Set(); } }