Hi everyone,I am writing a standalone application in C# for creating automated jpg maps. Originally, the code was in VBA and I am converting it to C#. I've written a couple of other standalone applications in C# where I queried and edited data but in those I was able to do it without having to call up ArcMap. Unforunately, I think for working with layouts, graphics, etc., I have to use ArcMap. If I am mistaken in this, please correct me.Anyhow, here's my problem. I can start ArcMap in code and load seveal SDE layers into it. The problem occurs when I try to do anything with the layers in the TOC. If I try to open an attribute table or change symbology, the screen flashes, all of the names of the layers in the TOC go away and all I am left with is the on/off checkbox with the red broken link exclamation mark next to each layer. After a few seconds, ArcMap crashes.I've seen a couple of similiar posts in the old forums but no solutions. Anyone have an idea of what I am doing wrong?Below is my code for starting ArcMap and loading SDE layers plus a screen capture of the error when ArcMap crashes.Thanks for your time,Carlosinternal static void StartArcMap()
{
try
{
m_MxDocument = new MxDocumentClass();
m_application = ((IDocument)m_MxDocument).Parent;
m_application.Visible = true;
// Wait for ArcMap to initialize before continuing.
System.Windows.Forms.Application.DoEvents();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
internal static ILayer AddSDEFeatureClass(string server, string instance, string user,
string password, string version, string featureClassName,
string tocName, short transparency, bool labels,
bool visibility, bool selectability)
{
try
{
IPropertySet pPropertySet = new PropertySetClass();
pPropertySet.SetProperty("SERVER", server);
pPropertySet.SetProperty("INSTANCE", instance);
pPropertySet.SetProperty("USER", user);
pPropertySet.SetProperty("PASSWORD", password);
pPropertySet.SetProperty("VERSION", version);
IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactoryClass();
IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.Open(pPropertySet, 0) as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(featureClassName);
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = pFeatureClass;
m_MxDocument.FocusMap.AddLayer(pFeatureLayer);
IGeoFeatureLayer pGeoFeatureLayerOut = pFeatureLayer as IGeoFeatureLayer;
// Apply TOC name.
pGeoFeatureLayerOut.Name = tocName;
// Set transparency.
ILayerEffects pLayerEffects = pFeatureLayer as ILayerEffects;
pLayerEffects.Transparency = transparency;
// Collapse the layer in the TOC.
ILegendInfo pLegendInfo = pGeoFeatureLayerOut as ILegendInfo;
ILegendGroup pLegendGroup = new LegendGroupClass();
pLegendGroup = pLegendInfo.get_LegendGroup(0);
pLegendGroup.Visible = false;
// if labels = true, turn labels on, otherwise off.
if (labels == true)
pGeoFeatureLayerOut.DisplayAnnotation = true;
else
pGeoFeatureLayerOut.DisplayAnnotation = false;
// If visibility = true, turn layer on, otherwise off.
if (visibility == true)
pGeoFeatureLayerOut.Visible = true;
else
pGeoFeatureLayerOut.Visible = false;
// If selectability = true, turn layer on, otherwise off.
if (selectability == true)
pGeoFeatureLayerOut.Selectable = true;
else
pGeoFeatureLayerOut.Selectable = false;
m_MxDocument.ActiveView.Refresh();
m_MxDocument.UpdateContents();
return pGeoFeatureLayerOut;
} //end try
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}