/// <summary> /// 일정 기간동안 dioport를 연다..(비동기 실행) /// </summary> /// <param name="shtDioPort"></param> /// <param name="intDuration"></param> public void DIOSetOnDuration_Async(short shtDioPort, int intDuration) { param_DIOSetOnDuration p = new param_DIOSetOnDuration(); p.intDuration = intDuration; p.shtDioPort = shtDioPort; ThreadPool.QueueUserWorkItem(new WaitCallback(DIOSetOnDuration), p); }
/// <summary> /// 일정 기간동안 dioport를 연다.. /// </summary> /// <param name="obj">param_DIOSetOnDuration 구조체</param> public void DIOSetOnDuration(object obj) { lock (this) { try { param_DIOSetOnDuration p = (param_DIOSetOnDuration)obj; bool isAck = false; //on신호는 3번 보낸다. 실패시 메소드 종료. for (int i = 1; i < 3; i++) { isAck = DIOSetOn(p.shtDioPort); if (isAck) { break; } } Thread.Sleep(p.intDuration); //off신호는 on 성공시만.. if (isAck) { //off신호는 성공시 까지... while (true) { //작업시만.. if (!bReadSocket) { break; } if (socket.Connected && DIOSetOff(p.shtDioPort)) { break; } } } } catch (Exception ex) { clsLog.WLog_Exception("DIOSetOnDuration", ex); } } }