public static void StartTask(object param) { AclasSDK_Args args = (AclasSDK_Args)param; AclasSDK_Initialize(null); uint iAddr = MakeHostToDWord(args.host); uint DataType = args.dataType; TASSDKDeviceInfo DeviceInfo = new TASSDKDeviceInfo(); // 链接不上 bInfo = False;剩的去 ping 了 // 链接超时时间、重试次数在 AclasSDK.ini 中配置 // GetDeviceTimeOut=2000 + GetDeviceTryCount=2 --> 10 秒超时时间 bool boolInfo = AclasSDK_GetDevicesInfo(iAddr, 0, ASSDK_ProtocolType_None, ref DeviceInfo); if (boolInfo) { Utils.StdoutToNodeJs(DISPATCH_CMD, new ResponseAclas(-1)); // 开始 TASSDKOnProgressEvent OnProgress = new TASSDKOnProgressEvent(OnProgressEvent); AclasSDK_WaitForTask(AclasSDK_ExecTaskA(DeviceInfo.Addr, DeviceInfo.Port, DeviceInfo.ProtocolType, ASSDK_ProcType_Down, DataType, args.fileName, OnProgress, null)); // 执行结束,直接释放 AclasSDK_Finalize(); } else { Utils.StdoutToNodeJs(DISPATCH_CMD, new ResponseAclas(501)); // 链接不上 } }
static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; if (args.Length == 0) { Utils.StdoutToNodeJs("error", new StateMsg(11, null, "入参错误: string[] args 不能为空")); return; } MainArgs = Utils.QueryString2Dict(args[0]); if (!MainArgs.ContainsKey("host") || !MainArgs.ContainsKey("filename") || !MainArgs.ContainsKey("type")) { Utils.StdoutToNodeJs("error", new StateMsg(12, null, "入参错误: [host, filename, type] 必须传入!\n传入参数: " + args[0])); return; } AclasSDK_Args aclasArgs = new AclasSDK_Args( MainArgs["host"], Convert.ToUInt32(MainArgs["type"]), MainArgs["filename"]); // Aclas.StartTask(aclasArgs); // 20-07-29 // 如果直接运行;在 electron 主进程中下发到 45 条后直接退出,还不报错! // 放在单独线程中运行即可解决 45 条意外退出问题 Thread thread = new Thread(new ParameterizedThreadStart(Aclas.StartTask)); thread.Start(aclasArgs); }