async public Task <bool> Init(string[] dioReturnCode, string[] aioReturnCode, string[] counterReturnCode) { bool result = await Task.Run(() => { if (dioReturnCode.Length != 2) { return(false); } if (aioReturnCode.Length != 2) { return(false); } if (counterReturnCode.Length != 3) { return(false); } for (int i = 0; i < 2; i++) { string returnCode; var ret = DioInit(Constants.DioDeviceName[i], out dioId[i], out returnCode); dioReturnCode[i] = returnCode; if (!ret) { return(false); } } dio.SetIoDirection(dioId[Constants.DioInputIndex], 0); //todo dio.SetIoDirection(dioId[Constants.DioOutputIndex], 5); //1:portAout, 2:portBout, 4:portCout then 5:portAandCout for (int i = 0; i < 2; i++) { string returnCode; var ret = AioInit(Constants.AioDeviceName[i], out aioId[i], out returnCode); aioReturnCode[i] = returnCode; if (!ret) { return(false); } } for (int i = 0; i < 2; i++) //todo { var ret = aio.SetAoRangeAll(aioId[i], (short)CaioConst.PM10); //0~10V if (ret != (int)CdioConst.DIO_ERR_SUCCESS) { return(false); } } { string returnCode; var ret = CounterBoardInit(out returnCode); counterReturnCode[0] = returnCode; if (!ret) { return(false); } } for (int i = 0; i < 2; i++) { string returnCode; var ret = CounterCHSetting(Constants.CounterCH[i], out returnCode); counterReturnCode[1 + i] = returnCode; if (!ret) { return(false); } } return(true); }); return(result); }