private Task ImportFromSettings(long id, Edition edition, MapCreationSettings settings) { var number = settings.NumberOfMaps; var boxes = new MapIDControl[number]; for (int i = 0; i < number; i++) { var box = new MapIDControl(id + i); boxes[i] = box; box.MouseDown += Box_MouseDown; } SendToZone(boxes, MapStatus.Importing); Task <IEnumerable <Map> > t; if (edition == Edition.Java) { t = new Task <IEnumerable <Map> >(() => { return(JavaMap.FromSettings(settings)); }); } else { t = new Task <IEnumerable <Map> >(() => { return(BedrockMap.FromSettings(settings)); }); } t.ContinueWith((prev) => { settings.Dispose(); if (t.IsFaulted) { MessageBox.Show($"Failed to create some maps for this reason: {ExceptionMessage(t.Exception)}", "Map load error!"); RemoveFromZone(boxes, MapStatus.Importing); } var results = prev.Result.ToArray(); for (int i = 0; i < number; i++) { boxes[i].SetBox(new MapPreviewBox(results[i])); } }, TaskScheduler.FromCurrentSynchronizationContext()); return(t); }
private async Task GetMaps(MapCreationSettings settings, MinecraftWorld world) { var progress = new Progress <MapCreationProgress>(); progress.ProgressChanged += (s, e) => ProgressChanged?.Invoke(this, e); var maps = (await Task.Run(() => world.MapsFromSettings(settings, progress))).ToList(); settings.Dispose(); lock (IDModificationLock) { var ids = UsedIDs; foreach (int index in DiscardIndexes.OrderByDescending(x => x)) { ids.RemoveAt(index); maps.RemoveAt(index); } ResultMaps = ids.Zip(maps, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v); } Finish(); }