AO10.1 如何利用BackgroundWorker创建shp文件

想要异步创建要素图层,并对要素图层进行操作。但是代码走到创建FeatureClass时出错。换成主线程代码运行无误。
        string pFloder = System.IO.Path.GetDirectoryName(fileName);
string pFileName = System.IO.Path.GetFileNameWithoutExtension(fileName);
if (!Directory.Exists(pFloder))
{
Directory.CreateDirectory(pFloder);
}
ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass();
pPropertySet.SetProperty("DATABASE", pFloder);
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesFile.ShapefileWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
IWorkspace pWorkspace = workspaceFactory.Open(pPropertySet, 0);
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
//IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
//IFeatureWorkspace pFeatureWorksapce = pWorkspaceFactory.OpenFromFile(pFloder, 0) as IFeatureWorkspace;
IFields pFields = new FieldsClass();
IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;

// 添加几何字段
IField pShapeField = new FieldClass();
IFieldEdit pShapeFieldEdit = pShapeField as IFieldEdit;
pShapeFieldEdit.Name_2 = "Shape";
pShapeFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

IGeometryDef pGeometryDef = new GeometryDefClass();
IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
pGeometryDefEdit.GeometryType_2 = geoType;
pGeometryDefEdit.HasZ_2 = hasZ;
pGeometryDefEdit.SpatialReference_2 = spatialReference;
pShapeFieldEdit.GeometryDef_2 = pGeometryDef;
pFieldsEdit.AddField(pShapeField);

// 出错代码
IFeatureClass pFeatureClass = pFeatureWorkspace.CreateFeatureClass(pFileName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
错误信息:

Image_1.png

 
已邀请:

朱新颖

赞同来自:

主线程中是否访问了同一个workspace等,注意同一个AO对象不能跨线程访问。

要回复问题请先登录注册