AE+C#通过多线程向GlobeControl中增加图层

0
分享 2014-04-10
闲话少说直接将源码贴出
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.Collections;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Analyst3D;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.GlobeCore;

namespaceWindowsFormsApplication2
{
publicpartialclassForm1 : Form
{
// 声明新的进程
privateThread _thread;
// 声明图层文件
privateILayerFile _layerFile;
// 声明进程完成时候的数据
privateeventEventHandler OnNumberClear;

public Form1()
{
InitializeComponent();


}

//执行完成之后,停止所有线程
void ThreadDemo_OnNumberClear(object sender, EventArgs e)
{
_thread.Abort();

}

privatevoid btnAdd_Click(object sender, EventArgs e)
{
_layerFile= newLayerFileClass();
_thread = newThread(newThreadStart(addLayer));

OnNumberClear += newEventHandler(ThreadDemo_OnNumberClear);

addLayerStart();
}
///<summary>
///进程开始
///</summary>
privatevoid addLayerStart()
{
_thread.Start();
}
///<summary>
///进程执行的内容
///</summary>
privatevoid addLayer()
{
//Monitor.Enter(this);//锁定,保持同步
string sFile = @"D:\CCCache\GlobeCache\Buildings_1CE1FE05-D138-4361-8C50-E3EB26B02858\cache.lyr";
_layerFile.Open(sFile);
ILayer pLayer = _layerFile.Layer;

IGlobeControl pGlobeControl =globeCtrl.Object asIGlobeControl;
IGlobeDisplayLayers2pGlobeDisplayLayers2 = pGlobeControl.GlobeDisplay asIGlobeDisplayLayers2;
pLayer.Visible = true;
// 加载图层到globeCtrl
pGlobeDisplayLayers2.AddLayer(pLayer);
//globeCtrl.GlobeDisplay.Scene.AddLayer(pLayer);
//globeCtrl.GlobeCamera.SetToZoomToExtents(pLayer.AreaOfInterest,globeCtrl.Globe,globeCtrl.GlobeVieweras ISceneViewer);

OnNumberClear(this,newEventArgs());//引发完成事件
//Monitor.Exit(this);//取消锁定
}

}
}


加载前:


加载后:

文章来源:http://blog.csdn.net/sydbc/article/details/17140373

0 个评论

要回复文章请先登录注册