관리 메뉴

안까먹을라고 쓰는 블로그

[C#] 딜레이 주기 (Feat. 윈도우폼에 영향없이) 본문

Language/C#

[C#] 딜레이 주기 (Feat. 윈도우폼에 영향없이)

YawnsDuzin 2020. 9. 14. 14:50

 

반응형
딜레이 함수
private void Delay_Manual(int iDelay)
{
    // 현재시같은 넣어준다.
    DateTime ThisMoment = DateTime.Now;
    // 딜레이 시간에 맞춰 Term값을 구한다.
    TimeSpan duration = new TimeSpan(0, 0, 0, 0, iDelay * 1000);
    // 딜레이 시간에 맞춘 Term이 더해진, 종료시간을 구한다.
    DateTime AfterWards = ThisMoment.Add(duration);
    while (true)
    {
        ThisMoment = DateTime.Now;

        // 현재 메시지 큐에있는 모든 Windows 메시지를 처리합니다.
        System.Windows.Forms.Application.DoEvents();

        // 종료시간 <= 현재시간 보다 작거나 같으면 종료
        if (AfterWards <= ThisMoment) break;
    }
}

 

사용예시 (ADAM-6266을 이용한, 디지털 아웃시간(경광등 울리는 시간) 설정)

// 경광등 On (DO0 - On)
GV.cMB.WriteSingleCoil(1, Convert.ToUInt16(iDO + 15), true);

// 5초간 유지
Delay_Manual(5000);

// 경광등 Off (DO0 - Off)
GV.cMB.WriteSingleCoil(1, Convert.ToUInt16(iDO + 15), false);

 

일반 적인  System.Threading.Thread.Sleep(1000); 함수를 이용하여, 딜레이 처리시에는

딜레이가 조금 길어지는 경우, 윈도우폼에 영향을 주어, 폼이 행 걸리는 것과 같은 문제가 발생한다.

반응형

'Language > C#' 카테고리의 다른 글

[C#] WINFORM - 구글맵 연동  (0) 2021.07.26
[C#] 시큐어코딩 - Cross Site Scripting (XSS)  (0) 2020.09.14
[C#] 교육사이트  (0) 2020.06.05
[C#] 공백제거  (0) 2020.04.07
[C#] byte 형 변환  (0) 2020.03.23
Comments