I'm helping a colleague debug a tool he is creating for ArcMap. It is used to create Replicas, and is done through selecting some different inputs from dropdowns in a winform.
The issue is that when running all the code on the UI-thread, our ui freezes. This is what he wants me to solve. The code causing this is the following, the relevant code is just the button1_Click_1() method, but i provided the second class for context:
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">partial</SPAN> <SPAN class="keyword token">class</SPAN> <SPAN class="token class-name">FrmReplicaAdmin</SPAN> <SPAN class="punctuation token">:</SPAN> Form
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">private</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">button1_Click_1</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">object</SPAN> sender<SPAN class="punctuation token">,</SPAN> EventArgs e<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
DataConnectionConfig selectedDatabase <SPAN class="operator token">=</SPAN> cmboxDatabase<SPAN class="punctuation token">.</SPAN>SelectedItem <SPAN class="keyword token">as</SPAN> DataConnectionConfig<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>PlWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
statusLabel<SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Could not open GeoDatabase (PL)"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>DataWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
statusLabel<SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Could not open GeoDatabase (NIS)"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">int</SPAN> scaleBand <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">int</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">Parse</SPAN><SPAN class="punctuation token">(</SPAN>cmboxScale<SPAN class="punctuation token">.</SPAN>SelectedItem<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> gridName <SPAN class="operator token">=</SPAN> cmboxGridNr<SPAN class="punctuation token">.</SPAN>SelectedItem <SPAN class="keyword token">as</SPAN> <SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">;</SPAN>
IGeometry shapeOfSelectedAOI <SPAN class="operator token">=</SPAN> <SPAN class="token function">getSelectedPolygon</SPAN><SPAN class="punctuation token">(</SPAN>gridName<SPAN class="punctuation token">,</SPAN> scaleBand<SPAN class="punctuation token">,</SPAN> selectedDatabase<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application <SPAN class="keyword token">as</SPAN> IMxApplication2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>PauseDrawing <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
replica<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CheckOutReplica</SPAN><SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>PlWorkspace<SPAN class="punctuation token">,</SPAN> selectedDatabase<SPAN class="punctuation token">.</SPAN>DataWorkspace<SPAN class="punctuation token">,</SPAN> selectedDatabase<SPAN class="punctuation token">.</SPAN>TemplateGdb<SPAN class="punctuation token">,</SPAN> gridName<SPAN class="punctuation token">,</SPAN> scaleBand<SPAN class="punctuation token">,</SPAN> shapeOfSelectedAOI<SPAN class="punctuation token">,</SPAN> selectedDatabase<SPAN class="punctuation token">.</SPAN>DatasetName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application <SPAN class="keyword token">as</SPAN> IMxApplication2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>PauseDrawing <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">class</SPAN> <SPAN class="token class-name">Replica</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">CheckOutReplica</SPAN><SPAN class="punctuation token">(</SPAN>IWorkspace plWorkspace<SPAN class="punctuation token">,</SPAN> IWorkspace parentWorkspace<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> pathToDatabaseTemplate<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> gridName<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">int</SPAN> scaleBand<SPAN class="punctuation token">,</SPAN> IGeometry shapeOfSelectedAOI<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> datasetName <SPAN class="operator token">=</SPAN> <SPAN class="string token">"NIS.Nautical"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">try</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">string</SPAN> replicaName <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">Format</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"{0}_{1}_r"</SPAN><SPAN class="punctuation token">,</SPAN> Environment<SPAN class="punctuation token">.</SPAN>UserName<SPAN class="punctuation token">,</SPAN> gridName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> versionName <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">Format</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"{0}_{1}"</SPAN><SPAN class="punctuation token">,</SPAN> Environment<SPAN class="punctuation token">.</SPAN>UserName<SPAN class="punctuation token">,</SPAN> gridName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> pathToLocalChildDatabase <SPAN class="operator token">=</SPAN> System<SPAN class="punctuation token">.</SPAN>IO<SPAN class="punctuation token">.</SPAN>Path<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Combine</SPAN><SPAN class="punctuation token">(</SPAN>ReplicationPath<SPAN class="punctuation token">,</SPAN> $<SPAN class="string token">"{replicaName}.gdb"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Directory<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CreateDirectory</SPAN><SPAN class="punctuation token">(</SPAN>pathToLocalChildDatabase<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">foreach</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">string</SPAN> newPath <SPAN class="keyword token">in</SPAN> Directory<SPAN class="punctuation token">.</SPAN><SPAN class="token function">GetFiles</SPAN><SPAN class="punctuation token">(</SPAN>pathToDatabaseTemplate<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"*.*"</SPAN><SPAN class="punctuation token">,</SPAN> SearchOption<SPAN class="punctuation token">.</SPAN>AllDirectories<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
File<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Copy</SPAN><SPAN class="punctuation token">(</SPAN>newPath<SPAN class="punctuation token">,</SPAN> newPath<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Replace</SPAN><SPAN class="punctuation token">(</SPAN>pathToDatabaseTemplate<SPAN class="punctuation token">,</SPAN> pathToLocalChildDatabase<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IWorkspace childWorkspace <SPAN class="operator token">=</SPAN> <SPAN class="token function">OpenWorkspace</SPAN><SPAN class="punctuation token">(</SPAN>pathToLocalChildDatabase<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// Create Version in ParentDatabase</SPAN>
IEnumVersionInfo versionEnum <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>parentWorkspace <SPAN class="keyword token">as</SPAN> IVersionedWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>Versions<SPAN class="punctuation token">;</SPAN>
versionEnum<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Reset</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>IVersionInfo versionInfo <SPAN class="operator token">=</SPAN> versionEnum<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Next</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> versionInfo <SPAN class="operator token">!=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">;</SPAN> versionInfo <SPAN class="operator token">=</SPAN> versionEnum<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Next</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>versionInfo<SPAN class="punctuation token">.</SPAN>VersionName<SPAN class="punctuation token">.</SPAN><SPAN class="token function">EndsWith</SPAN><SPAN class="punctuation token">(</SPAN>versionName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Forms<SPAN class="punctuation token">.</SPAN>MessageBox<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Show</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"A version named '"</SPAN> <SPAN class="operator token">+</SPAN> versionName <SPAN class="operator token">+</SPAN> <SPAN class="string token">"' has already been created"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"map..."</SPAN><SPAN class="punctuation token">,</SPAN> System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Forms<SPAN class="punctuation token">.</SPAN>MessageBoxButtons<SPAN class="punctuation token">.</SPAN>OK<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
Marshal<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ReleaseComObject</SPAN><SPAN class="punctuation token">(</SPAN>versionEnum<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IVersion newVersion <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>parentWorkspace <SPAN class="keyword token">as</SPAN> IVersionedWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>DefaultVersion<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CreateVersion</SPAN><SPAN class="punctuation token">(</SPAN>versionName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
newVersion<SPAN class="punctuation token">.</SPAN>Access <SPAN class="operator token">=</SPAN> esriVersionAccess<SPAN class="punctuation token">.</SPAN>esriVersionAccessPublic<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> defQuery <SPAN class="operator token">=</SPAN> <SPAN class="string token">"((IS_CONFLATE=1 AND PLTS_COMP_SCALE >= "</SPAN> <SPAN class="operator token">+</SPAN> scaleBand <SPAN class="operator token">+</SPAN> <SPAN class="string token">") OR ((IS_CONFLATE=0 OR IS_CONFLATE IS NULL) AND PLTS_COMP_SCALE = "</SPAN> <SPAN class="operator token">+</SPAN> scaleBand <SPAN class="operator token">+</SPAN> <SPAN class="string token">"))"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">ReplicateData</SPAN><SPAN class="punctuation token">(</SPAN>parentWorkspace<SPAN class="punctuation token">,</SPAN> newVersion<SPAN class="punctuation token">.</SPAN>VersionInfo<SPAN class="punctuation token">,</SPAN> replicaName<SPAN class="punctuation token">,</SPAN> shapeOfSelectedAOI<SPAN class="punctuation token">,</SPAN> childWorkspace<SPAN class="punctuation token">,</SPAN> defQuery<SPAN class="punctuation token">,</SPAN> datasetName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// Update map. Show replica data</SPAN>
ILayerFile nauticalLyrFile <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">LayerFileClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
nauticalLyrFile<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Open</SPAN><SPAN class="punctuation token">(</SPAN>ReplicationPath <SPAN class="operator token">+</SPAN> <SPAN class="string token">@"\Nautical.lyr"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">AddDataToMap</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application<SPAN class="punctuation token">.</SPAN>Document <SPAN class="keyword token">as</SPAN> IMxDocument<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> childWorkspace <SPAN class="keyword token">as</SPAN> IFeatureWorkspace<SPAN class="punctuation token">,</SPAN> nauticalLyrFile<SPAN class="punctuation token">,</SPAN> gridName<SPAN class="punctuation token">,</SPAN> datasetName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application<SPAN class="punctuation token">.</SPAN>Document <SPAN class="keyword token">as</SPAN> IMxDocument<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>ActiveView<SPAN class="punctuation token">.</SPAN>Extent <SPAN class="operator token">=</SPAN> shapeOfSelectedAOI<SPAN class="punctuation token">.</SPAN>Envelope<SPAN class="punctuation token">;</SPAN>
Marshal<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ReleaseComObject</SPAN><SPAN class="punctuation token">(</SPAN>childWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">catch</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="token class-name">Exception</SPAN> err<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Forms<SPAN class="punctuation token">.</SPAN>MessageBox<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Show</SPAN><SPAN class="punctuation token">(</SPAN>$<SPAN class="string token">"Unexpected error. {Environment.NewLine}{err.Message}"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"map..."</SPAN><SPAN class="punctuation token">,</SPAN> System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Forms<SPAN class="punctuation token">.</SPAN>MessageBoxButtons<SPAN class="punctuation token">.</SPAN>OK<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">private</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">ReplicateData</SPAN><SPAN class="punctuation token">(</SPAN>IWorkspace parentWorkspace<SPAN class="punctuation token">,</SPAN> IVersionInfo versionInfo<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> replicaName<SPAN class="punctuation token">,</SPAN> IGeometry area<SPAN class="punctuation token">,</SPAN> IWorkspace childWorkspace<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> definitionQuery<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> featureDataset<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>childWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ArgumentNullException</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Child workspace is null."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>parentWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ArgumentNullException</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Parent workspace is null."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>versionInfo <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ArgumentNullException</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Version name is null."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">IsNullOrEmpty</SPAN><SPAN class="punctuation token">(</SPAN>replicaName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ArgumentNullException</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Replica name is null."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>area <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ArgumentNullException</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Area geometry is null."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IVersion oVersion <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>parentWorkspace <SPAN class="keyword token">as</SPAN> IVersionedWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">FindVersion</SPAN><SPAN class="punctuation token">(</SPAN>versionInfo<SPAN class="punctuation token">.</SPAN>VersionName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IWorkspace sdeVersionWorkspace <SPAN class="operator token">=</SPAN> oVersion <SPAN class="keyword token">as</SPAN> IWorkspace<SPAN class="punctuation token">;</SPAN>
IGeoDataServer parentGds <SPAN class="operator token">=</SPAN> <SPAN class="token function">InitGeoDataServer</SPAN><SPAN class="punctuation token">(</SPAN>sdeVersionWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN>
childGds <SPAN class="operator token">=</SPAN> <SPAN class="token function">InitGeoDataServer</SPAN><SPAN class="punctuation token">(</SPAN>childWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">CreateFeatureDatasetReplica</SPAN><SPAN class="punctuation token">(</SPAN>parentGds<SPAN class="punctuation token">,</SPAN> childGds<SPAN class="punctuation token">,</SPAN> versionInfo<SPAN class="punctuation token">,</SPAN> replicaName<SPAN class="punctuation token">,</SPAN> parentWorkspace<SPAN class="punctuation token">,</SPAN> childWorkspace<SPAN class="punctuation token">,</SPAN> area<SPAN class="punctuation token">,</SPAN> definitionQuery<SPAN class="punctuation token">,</SPAN> featureDataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Marshal<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ReleaseComObject</SPAN><SPAN class="punctuation token">(</SPAN>parentGds<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
Marshal<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ReleaseComObject</SPAN><SPAN class="punctuation token">(</SPAN>childGds<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="comment token"><SPAN>//Function to create the replica, based on this link </SPAN><A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=http%3A%2F%2Fhelp.arcgis.com%2Fen%2Fsdk%2F10.0%2Farcobjects_net%2Fconceptualhelp%2Findex.html%23%2F%2F0001000003r5000000" target="_blank">http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000003r5000000</A><SPAN> </SPAN></SPAN>
<SPAN class="keyword token">private</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">CreateFeatureDatasetReplica</SPAN><SPAN class="punctuation token">(</SPAN>IGeoDataServer parentGDS<SPAN class="punctuation token">,</SPAN> IGeoDataServer childGDS<SPAN class="punctuation token">,</SPAN> IVersionInfo versionInfo<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> replicaName<SPAN class="punctuation token">,</SPAN> IWorkspace parentWorkspace<SPAN class="punctuation token">,</SPAN> IWorkspace childWorkspace<SPAN class="punctuation token">,</SPAN> IGeometry geometry<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> definitionQuery<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">string</SPAN> featureDatasetName<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
IList<SPAN class="operator token"><</SPAN><SPAN class="keyword token">string</SPAN><SPAN class="operator token">></SPAN> existingReplicas <SPAN class="operator token">=</SPAN> <SPAN class="token function">ReadExistingReplicas</SPAN><SPAN class="punctuation token">(</SPAN>parentGDS<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>existingReplicas<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Contains</SPAN><SPAN class="punctuation token">(</SPAN>replicaName<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToUpper</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Exception</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"A replica with the following name has already been created: "</SPAN> <SPAN class="operator token">+</SPAN> replicaName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
IEnumDataset datasets <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="operator token">!</SPAN><SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">IsNullOrEmpty</SPAN><SPAN class="punctuation token">(</SPAN>featureDatasetName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
IEnumDataset featureDatasets <SPAN class="operator token">=</SPAN> parentWorkspace<SPAN class="punctuation token">.</SPAN><SPAN class="token function">get_Datasets</SPAN><SPAN class="punctuation token">(</SPAN>esriDatasetType<SPAN class="punctuation token">.</SPAN>esriDTFeatureDataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IFeatureDataset featureDataset<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">while</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>featureDataset <SPAN class="operator token">=</SPAN> featureDatasets<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Next</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> IFeatureDataset<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">!=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>featureDataset<SPAN class="punctuation token">.</SPAN>Name <SPAN class="operator token">==</SPAN> featureDatasetName<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
datasets <SPAN class="operator token">=</SPAN> featureDataset<SPAN class="punctuation token">.</SPAN>Subsets<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">break</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>datasets <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">throw</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Exception</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Didn't find FeatureDataset "</SPAN> <SPAN class="operator token">+</SPAN> featureDatasetName <SPAN class="operator token">+</SPAN> <SPAN class="string token">" in the db"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">else</SPAN>
<SPAN class="punctuation token">{</SPAN>
datasets <SPAN class="operator token">=</SPAN> parentWorkspace<SPAN class="punctuation token">.</SPAN><SPAN class="token function">get_Datasets</SPAN><SPAN class="punctuation token">(</SPAN>esriDatasetType<SPAN class="punctuation token">.</SPAN>esriDTFeatureClass<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
IGPReplicaDatasets gpReplicaDatasets <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">GPReplicaDatasetsClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IDataset dataset<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">while</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>dataset <SPAN class="operator token">=</SPAN> datasets<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Next</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">!=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">//temporary workaround to not include a view that is on the feature classes :^)</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Contains</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"VW_"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">||</SPAN> dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Contains</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"_EVW"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>m_ListExcludedTables<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Contains</SPAN><SPAN class="punctuation token">(</SPAN>dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Substring</SPAN><SPAN class="punctuation token">(</SPAN>dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">LastIndexOf</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"."</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToUpper</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="operator token">!</SPAN><SPAN class="punctuation token">(</SPAN>childWorkspace <SPAN class="keyword token">as</SPAN> IWorkspace2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>NameExists<SPAN class="punctuation token">[</SPAN>dataset<SPAN class="punctuation token">.</SPAN>Type<SPAN class="punctuation token">,</SPAN> dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Substring</SPAN><SPAN class="punctuation token">(</SPAN>dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">LastIndexOf</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"."</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN><SPAN class="punctuation token">;</SPAN>
IGPReplicaDataset gpReplicaDataset <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">GPReplicaDatasetClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>DatasetType <SPAN class="operator token">=</SPAN> dataset<SPAN class="punctuation token">.</SPAN>Type<SPAN class="punctuation token">;</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>Name <SPAN class="operator token">=</SPAN> dataset<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToUpper</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>IsPrivate <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>UseGeometry <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>RowsType <SPAN class="operator token">=</SPAN> esriRowsType<SPAN class="punctuation token">.</SPAN>esriRowsTypeFilter<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>dataset <SPAN class="keyword token">as</SPAN> ITable<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>Fields<SPAN class="punctuation token">.</SPAN><SPAN class="token function">FindField</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"PLTS_COMP_SCALE"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">!=</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>DefQuery <SPAN class="operator token">=</SPAN> definitionQuery<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//DefQuery here</SPAN>
<SPAN class="keyword token">else</SPAN>
gpReplicaDataset<SPAN class="punctuation token">.</SPAN>DefQuery <SPAN class="operator token">=</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDatasets<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>gpReplicaDataset<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
IGPReplicaDescription gpReplicaDesc <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">GPReplicaDescriptionClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDesc<SPAN class="punctuation token">.</SPAN>QueryGeometry <SPAN class="operator token">=</SPAN> geometry<SPAN class="punctuation token">;</SPAN>
gpReplicaDesc<SPAN class="punctuation token">.</SPAN>SpatialRelation <SPAN class="operator token">=</SPAN> esriSpatialRelEnum<SPAN class="punctuation token">.</SPAN>esriSpatialRelIntersects<SPAN class="punctuation token">;</SPAN>
gpReplicaDesc<SPAN class="punctuation token">.</SPAN>ModelType <SPAN class="operator token">=</SPAN> esriReplicaModelType<SPAN class="punctuation token">.</SPAN>esriModelTypeSimple<SPAN class="punctuation token">;</SPAN>
gpReplicaDesc<SPAN class="punctuation token">.</SPAN>SingleGeneration <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
gpReplicaDesc<SPAN class="punctuation token">.</SPAN>ReplicaDatasets <SPAN class="operator token">=</SPAN> gpReplicaDatasets<SPAN class="punctuation token">;</SPAN>
IGPReplicaOptions2 replicaOptions <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">GPReplicaOptionsClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
replicaOptions<SPAN class="punctuation token">.</SPAN>AccessType <SPAN class="operator token">=</SPAN> esriReplicaAccessType<SPAN class="punctuation token">.</SPAN>esriReplicaAccessNone<SPAN class="punctuation token">;</SPAN>
replicaOptions<SPAN class="punctuation token">.</SPAN>RegisterReplicaOnly <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="token function">ExtractData</SPAN><SPAN class="punctuation token">(</SPAN>datasets<SPAN class="punctuation token">,</SPAN> childWorkspace<SPAN class="punctuation token">,</SPAN> geometry<SPAN class="punctuation token">,</SPAN> definitionQuery<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
IReplicationAgent replicationAgent <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">ReplicationAgentClass</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
replicationAgent<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CreateReplica</SPAN><SPAN class="punctuation token">(</SPAN>versionInfo<SPAN class="punctuation token">.</SPAN>VersionName<SPAN class="punctuation token">,</SPAN> parentGDS<SPAN class="punctuation token">,</SPAN> childGDS<SPAN class="punctuation token">,</SPAN> replicaName<SPAN class="punctuation token">,</SPAN> gpReplicaDesc<SPAN class="punctuation token">,</SPAN> replicaOptions<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>For fixing the UI freeze i made the following changes to the button1_Click_1() method:
<SPAN class="keyword token">public</SPAN> <SPAN class="keyword token">partial</SPAN> <SPAN class="keyword token">class</SPAN> <SPAN class="token class-name">FrmReplicaAdmin</SPAN> <SPAN class="punctuation token">:</SPAN> Form
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">private</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">button1_Click_1</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">object</SPAN> sender<SPAN class="punctuation token">,</SPAN> EventArgs e<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
DataConnectionConfig selectedDatabase <SPAN class="operator token">=</SPAN> cmboxDatabase<SPAN class="punctuation token">.</SPAN>SelectedItem <SPAN class="keyword token">as</SPAN> DataConnectionConfig<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>PlWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
statusLabel<SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Could not open GeoDatabase (PL)"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>DataWorkspace <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
statusLabel<SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Could not open GeoDatabase (NIS)"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">int</SPAN> scaleBand <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">int</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">Parse</SPAN><SPAN class="punctuation token">(</SPAN>cmboxScale<SPAN class="punctuation token">.</SPAN>SelectedItem<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> gridName <SPAN class="operator token">=</SPAN> cmboxGridNr<SPAN class="punctuation token">.</SPAN>SelectedItem <SPAN class="keyword token">as</SPAN> <SPAN class="keyword token">string</SPAN><SPAN class="punctuation token">;</SPAN>
IGeometry shapeOfSelectedAOI <SPAN class="operator token">=</SPAN> <SPAN class="token function">getSelectedPolygon</SPAN><SPAN class="punctuation token">(</SPAN>gridName<SPAN class="punctuation token">,</SPAN> scaleBand<SPAN class="punctuation token">,</SPAN> selectedDatabase<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// adding inputs to list i can pass onto the backgroundWorker</SPAN>
List<SPAN class="operator token"><</SPAN><SPAN class="keyword token">object</SPAN><SPAN class="operator token">></SPAN> arguments <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">List</SPAN><SPAN class="operator token"><</SPAN><SPAN class="keyword token">object</SPAN><SPAN class="operator token">></SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>PlWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>DataWorkspace<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>TemplateGdb<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>gridName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>scaleBand<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>shapeOfSelectedAOI<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
arguments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>selectedDatabase<SPAN class="punctuation token">.</SPAN>DatasetName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
backgroundWorker1<SPAN class="punctuation token">.</SPAN><SPAN class="token function">RunWorkerAsync</SPAN><SPAN class="punctuation token">(</SPAN>arguments<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// starting progress bar</SPAN>
progressBarReplica<SPAN class="punctuation token">.</SPAN>Visible <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
lblReplica<SPAN class="punctuation token">.</SPAN>Text <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Checking out replica..."</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="keyword token">private</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">backgroundWorker1_DoWork</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">object</SPAN> sender<SPAN class="punctuation token">,</SPAN> DoWorkEventArgs e<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
List<SPAN class="operator token"><</SPAN><SPAN class="keyword token">object</SPAN><SPAN class="operator token">></SPAN> genericlist <SPAN class="operator token">=</SPAN> e<SPAN class="punctuation token">.</SPAN>Argument <SPAN class="keyword token">as</SPAN> List<SPAN class="operator token"><</SPAN><SPAN class="keyword token">object</SPAN><SPAN class="operator token">></SPAN><SPAN class="punctuation token">;</SPAN>
IWorkspace ws <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>IWorkspace<SPAN class="punctuation token">)</SPAN>genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
IWorkspace pWs <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>IWorkspace<SPAN class="punctuation token">)</SPAN>genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> pathToDbTemplate <SPAN class="operator token">=</SPAN> genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> gName <SPAN class="operator token">=</SPAN> genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">int</SPAN> sBand <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">int</SPAN><SPAN class="punctuation token">)</SPAN>genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
IGeometry shape <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>IGeometry<SPAN class="punctuation token">)</SPAN>genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">string</SPAN> dsName <SPAN class="operator token">=</SPAN> genericlist<SPAN class="punctuation token">[</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application <SPAN class="keyword token">as</SPAN> IMxApplication2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>PauseDrawing <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">true</SPAN><SPAN class="punctuation token">;</SPAN>
replica<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CheckOutReplica</SPAN><SPAN class="punctuation token">(</SPAN>ws<SPAN class="punctuation token">,</SPAN> pWs<SPAN class="punctuation token">,</SPAN> pathToDbTemplate<SPAN class="punctuation token">,</SPAN> gName<SPAN class="punctuation token">,</SPAN> sBand<SPAN class="punctuation token">,</SPAN> shape<SPAN class="punctuation token">,</SPAN> dsName<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">(</SPAN>ArcMap<SPAN class="punctuation token">.</SPAN>Application <SPAN class="keyword token">as</SPAN> IMxApplication2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>PauseDrawing <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>This is causing a: "RPC_E_SERVERFAULT(0X80010105)", but the UI isn't freezing anymore. My guess is that it's because i'm initiating the database in the first thread, and then using it in the second. I also sort of get that i can't use a backgroundWorker due to the entire STA and COM-object things with ArcGis, but i'm still not getting all this 100%.
Any help of a possible solution to making my UI responsive, or at least showing some sort of progressbar while the task is running would be nice. The entire process can take a few minutes at times, and the program feels like it's crashed meanwhile due to the freeze.
Edit: I'm referring to ArcMap, forgot to mention that.