private void DeleteSelection(object param) { DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } EditParameters editParameters = (EditParameters)param; if (editParameters == null) { return; } CommandManagerServices.Instance().StartCommand(); FDECommand cmd = new FDECommand(false, true); int count = SelectCollection.Instance().GetCount(false); int num = 0; foreach (DF3DFeatureClass featureClassInfo in SelectCollection.Instance().FeatureClassInfoMap.Keys) { if (this._bgWorker.CancellationPending) { break; } ResultSetInfo resultSetInfo = SelectCollection.Instance().FeatureClassInfoMap[featureClassInfo] as ResultSetInfo; if (resultSetInfo != null) { System.Collections.Generic.List <int> list = new System.Collections.Generic.List <int>(); if (featureClassInfo.GetFeatureClass().HasTemporal() && CommonUtils.Instance().EnableTemproalEdit) { IConnectionInfo connectionInfo = new ConnectionInfoClass(); connectionInfo.FromConnectionString(featureClassInfo.GetFeatureClass().DataSource.ConnectionInfo.ToConnectionString()); IDataSource dataSource = ((IDataSourceFactory) new DataSourceFactoryClass()).OpenDataSource(connectionInfo); IFeatureDataSet featureDataSet = dataSource.OpenFeatureDataset(CommonUtils.Instance().GetCurrentFeatureDataset().Name); IFeatureClass featureClass = featureDataSet.OpenFeatureClass(featureClassInfo.GetFeatureClass().Name); foreach (DataRow dataRow in resultSetInfo.ResultSetTable.Rows) { int item = int.Parse(dataRow[featureClass.FidFieldName].ToString()); list.Add(item); } TemporalFilter temporalFilter = new TemporalFilterClass(); temporalFilter.AddSubField(featureClass.FidFieldName); temporalFilter.IdsFilter = list.ToArray(); ITemporalManager temporalManager = featureClass.TemporalManager; ITemporalCursor temporalCursor = temporalManager.Search(temporalFilter); while (temporalCursor.MoveNext()) { this._manualResult.WaitOne(); System.Threading.Thread.Sleep(1); temporalCursor.Dead(editParameters.TemproalTime); num++; string userState = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, count); int percentProgress = num * 100 / count; this._bgWorker.ReportProgress(percentProgress, userState); } System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalManager); System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass); System.Runtime.InteropServices.Marshal.ReleaseComObject(featureDataSet); System.Runtime.InteropServices.Marshal.ReleaseComObject(dataSource); } else { IFeatureClass featureClass2 = featureClassInfo.GetFeatureClass(); foreach (DataRow dataRow2 in resultSetInfo.ResultSetTable.Rows) { if (this._bgWorker.CancellationPending) { break; } this._manualResult.WaitOne(); System.Threading.Thread.Sleep(1); int item2 = int.Parse(dataRow2[featureClass2.FidFieldName].ToString()); list.Add(item2); num++; string userState2 = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, count); int percentProgress2 = num * 100 / count; this._bgWorker.ReportProgress(percentProgress2, userState2); } if (list.Count > 0) { CommonUtils.Instance().FdeUndoRedoManager.DeleteFeatures(featureClass2, list.ToArray()); list.Clear(); } } } } CommandManagerServices.Instance().CallCommand(cmd); app.Workbench.UpdateMenu(); //System.IAsyncResult asyncResult = MainFrmService.ResultSetPanel.BeginInvoke(this._clearSelection); //MainFrmService.ResultSetPanel.EndInvoke(asyncResult); }