PIE SDK算法的異步調用

 

1.算法功能簡介

    異步方法一旦開始,方法調用就會當即返回,調用者就能夠繼續後續的操做。異步方法一般會在另一個線程中,「真實」地執行着。整個過程,不會阻礙調用者的工做。算法

     PIE SDK支持算法功能的執行,下面對算法的異步調用功能進行介紹。異步

2.算法功能實現說明

2.1. 示例簡介

    AlgoFactory類實現了算法的管理,主要實現瞭如下方法:ide

    1)      AlgoFactory.Instance().CreateAlgo(A,B)實現算法Algo的建立;須要注意的是:A:「PIE.CommonAlgo.dll」,B: "PIE.CommonAlgo.ImageClipAlgo"。spa

    2)      設置算法的參數;線程

    3)      經過AlgoFactory.Instance().AsynExcuteAlgo(algo)實現異步調用。3d

    ISystemAlgoEvents接口是算法進度變化事件接口,用來管理算法執行進度變化( OnProgressChangedEvent )以及執行完成( OnExcuteCompletedEvent )事件。code

2.2. 實現步驟

第一步視頻

算法建立CreateAlgo;blog

第二步教程

設置算法參數;

第三步

異步執行AsynExcuteAlgo;

第四步

編寫算法執行完成事件

第五步

編寫算法進度變化事件

2.3. 示例代碼

項目路徑

百度雲盤地址下/PIE示例程序/10.算法調用/算法的調用方式/Algo.AsynExecute

數據路徑

百度雲盤地址下/PIE示例數據/柵格數據/01.GF1/ MS.tif

視頻路徑

百度雲盤地址下/PIE視頻教程/10.算法調用/算法的調用方式/算法的異步調用.avi

示例代碼

 1          /// <summary>
 2         /// 單擊方法
 3         /// </summary>
 4         public override void OnClick()
 5         {
 6             //Clip裁剪
 7             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info();
 8 
 9             info.InputFilePath = @"D:\Data\GF1_ortho.tif";  //待裁剪影像
10             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);
11             if (rDataset == null) return;
12             int count = rDataset.GetBandCount();
13             List<int> list = new List<int> { };
14             for (int i = 0; i < count; i++)
15             {
16 
17                 list.Add(i);
18             }
19             info.listBands = list;
20             info.XFactor = 1;
21             info.YFactor = 1;
22             info.bInvalidValue = false;
23             info.OutputFilePath = @"D:\Data\clip_AsynExecute.tif";  //裁剪保存結果
24             info.Type = 0;  // (等於0表示經過柵格範圍裁剪)
25             info.XStart = 0;
26             info.XEnd = 2000;
27             info.YStart = 0;
28             info.YEnd = 2000;
29             info.FileType = "GTiff";  //Tiff數據的FileTypeCode爲「GTiff」,IMG數據的FileTypeCode爲"HFA",其餘格式的爲"ENVI"。;
30 
31             //一、初始實例化Instance,算法建立CreateAlgo
32             PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");
33             if (algo == null) return;
34 
35             //二、異步執行AsynExcuteAlgo
36             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
37             algo.Name = "影像裁剪";
38             algo.Params = info;
39             algoEvents.OnExecuteCompleted += OnAlgoExcuteCompleted;
40             algoEvents.OnProgressChanged += OnAlgoProgressChanged;
41 
42             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
43             statusBar.ShowProgress(0, 100, "");
44             PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);
45         }
46 
47         /// <summary>
48         /// 三、算法執行完成事件
49         /// </summary>
50         /// <param name="algo">算法</param>
51         private void OnAlgoExcuteCompleted(PIE.SystemAlgo.ISystemAlgo algo)
52         {
53             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
54             statusBar.UpdateProgress(100, "");
55             statusBar.HideProgress();
56 
57             PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\clip_AsynExecute.tif");
58             m_HookHelper.FocusMap.AddLayer(layer);
59             m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
60 
61             PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;
62             algoEvents.OnExecuteCompleted -= OnAlgoExcuteCompleted;
63             algoEvents.OnProgressChanged -= OnAlgoProgressChanged;
64         }
65 
66         /// <summary>
67         /// 四、算法進度變化事件
68         /// </summary>
69         /// <param name="complete">進度</param>
70         /// <param name="msg">進度信息</param>
71         /// <param name="algo">算法</param>
72         /// <returns>int</returns>
73         private int OnAlgoProgressChanged(double complete, string msg, PIE.SystemAlgo.ISystemAlgo algo)
74         {
75             PIE.AxControls.IStatusBar statusBar = m_Application.StatusBar;
76             statusBar.UpdateProgress((int)complete, msg);
77             return 0;
78         }
View Code

2.4. 示例截圖

算法的異步調用

 

算法的執行狀況顯示

相關文章
相關標籤/搜索