private void loadMapTh(MapInfo info) { BackgroundWorker worker = new BackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.WorkerReportsProgress = true; worker.DoWork += (s, e) => { try { e.Result = loadMap(e.Argument as MapInfo); } catch (MapLoadException) { e.Cancel = true; } }; worker.RunWorkerCompleted += (s, e) => { if (e.Cancelled) { MapLoadCanceledEventHandler del = OnMapLoadCanceled; if (del != null) { MapLoadCanceledEventArgs arg = new MapLoadCanceledEventArgs(null); del(s, arg); } } else { MapLoadedEventHandler del = OnMapLoaded; if (del != null) { MapLoadedEventArgs arg = new MapLoadedEventArgs(e.Result as Map); del(s, arg); } } }; worker.RunWorkerAsync(info); }