1. 程式人生 > >ArcGISEngine中GP工具奇怪錯誤問題

ArcGISEngine中GP工具奇怪錯誤問題

執行時環境:使用CADToGeodatabase工具執行DWG檔案轉gdb過程,多次執行(即執行完一個dwg轉gdb,再執行另一個dwg轉gdb),執行失敗

錯誤描述:首先執行CADToGeodatabase工具需要先生成gdb工作空間,這個很簡單沒什麼問題

IWorkspaceFactory2 pTargetWsf = new FileGDBWorkspaceFactoryClass();
IWorkspaceName pWorkspaceName = pTargetWsf.Create(sPath, sName, null, 0);
IWorkspace gdbWks = pTargetWsf.Open(pWorkspaceName.ConnectionProperties, 0
);

然後執行CADToGeodatabase gp工具。

public static bool CADToGeodatabase(string cadPath,string gdbPath,ref string msg)
        {
            Geoprocessor gp = new Geoprocessor();
            object sev = null;
            try
            {
                CADToGeodatabase tool = new CADToGeodatabase();
                tool.input_cad_datasets 
= cadPath; tool.out_dataset_name = "CADDATASET"; tool.out_gdb_path = gdbPath; tool.reference_scale = 1000; gp.Execute(tool, null); return true; } catch (Exception ex) { msg
= gp.GetMessages(ref sev); return false; } }

問題來了,在gp.Execute(tool, null)處,第二次執行會丟擲異常,通過檢視msg。很奇怪的問題,檢視官方文件沒找到解決方案

ERROR 000278: 2072 error(s) have been detected for layer 20181015142904. Errors are described in file GLC:\Users\使用者\AppData\Local\Temp\GL201810151429040.log.log in your temp directory.
ERROR 000016: 2072 annotation(s) rejected
Failed to execute (CADToGeodatabase).

在temp資料夾下確實發現了log日誌。裡面記錄的也看不懂。

後來發現官方例項用到gp工具的地方都是在類例項中使用,沒在靜態方法中使用。於是測試把gp工具不用靜態呼叫,結果好了,而且每次在temp下都不會有日誌存在。

 淺嘗輒止:以後用gp工具最好不要放在靜態呼叫