2021. 6. 30. 11:07

C# SendKeys.Enter 관련 Delay 관련 리서치

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요 최근 스마트팩토리 관련 프로젝트 진행중입니다.

현재 진행하는 공장 특정 라인 장비에 붙어 있는 PC에서 측정 장비의 측정 데이터를 받아 오는 프로그램이 있습니다.

장비<->PC 는 com serial 통신을 하며, 해당 프로그램은 X,Y키 입력시 키보드 후킹을 걸어서 장비 측정 값을 메모장 또는 엑셀에 대신 입력 해주는 방식입니다.

X키 입력시 "1234.55 엔터" 이렇게 입력하는데..

해당 프로그램이 저희 POP에 접속하여 값을 입력할때 엔터 키 입력이 이뤄지며..해당 엔터키 입력시 DB에 조회 및 삽입을 하게 되는데...

해당 구간에서 Grid의 데이터 변경 및 SelectedCell의 위치가 바뀌는 경우가 있습니다.

이때 10초 정도씩 딜레이가 발생됩니다.

해당 PC의 운영체제는 win7 professional 이고 개발PC는 win10 입니다.

증상은 win10에서는 발생되지 않습니다.

https://stackoverflow.com/questions/4479214/sending-key-hangs-pc-in-c-sharp

위의 링크에서 간단히 언급한거는 DeadLock을 언급하고 있습니다.

개인적인 생각엔 Cross thread 문제 처럼 , STA 모델에서 UI thread와 Keyboard thread의 자원 선점의 딜레이가 아닌가 합니다.

이와 비슷한 딜레이가 발생되는 항목중 clipboard.setText, getText가 있습니다. 

해당 작업 역시 clipboard에 접근해서 get,set 하는 부분인데 해당 부분 진입시 딜레이가 발생되는 경우가 있습니다.

keyboard.sendkey 역시 비슷한 맥락의 thread hang 이 아닐까 하고 있습니다.

해당 증상은 devexpress의 grid활용하여 데이터 바인딩시, selection changed시 , keyboard.sendkey("{ENTER}")시 발생되는 연속 trigger 형태의 이벤트 때문에 발생되는 딜레이라서... sendkey의 입력이 직접 연관되지는 않습니다.

그나마 deadlock 과 hang 관련되서 언급된 항목이 있기에 붙여넣기 합니다.

감사합니다.