스레드 (개발생각)

sbe03253·2022년 12월 3일
0

개발을 하면서 애로사항이 하나 있었다.
메인폼에서 UI 컨트롤을 하면서 실시간작업을 같이 수행하고 있었는데
문제는 로그를 시각적으로 확인하기 위한 폼을 new Form.show()로 생성했는데 show()를 하면서 메인폼을 블럭하지 않기에 새로운 작업스레드가 새로운 폼을 show해주는 줄 알았다.하지만 디버깅 과정에서 mainThread가 폼생성을 하는것을 확인하였다.이럴 경우 새로운 폼에서 UI 작업을 하려면 폼을 생성했던 thread인 mainThread에게 UI 컨트롤을 Invoke해야하는 문제가 생겼다.

나는 실시간 처리를 하는 코드와 UI를 컨트롤( new Form생성 ) 코드를 스레드 상 분리하고 싶었다.

이를 처리하기 위해서 UI 컨트롤에는 메인폼의 this 포인터만 전송해서 UI컨트롤에서 mainForm.X 로 데이터만 확인할 수 있게 작업하였다.
이렇게 처리하니 디버깅 상에서 새로운 폼은 새로운 스레드 ID에 할당됐고
UI컨트롤에서 사용하던 Invoke도 필요하지않았다( mainThread에서 new Form을 생성했으니 UI컨트롤은 mainThread을 거쳐야했지만 newThread가 new Form을 생성하면 UI컨트롤은 newThread를 거치기만 하면 됐기 때문)

이로써 실시간처리는 독립적으로 수행된다.

profile
자동매매 프로그래머

0개의 댓글