SerialPort 에서 close 시 Recv Thread 가 Invoke 를 하고 있으면
Close 시의 Main -> Recv Wait 와
Invoke 시의 Recv -> Main Wait 가 충돌하여 데드락에 걸린다
해결방법은
1. PeekMessage를 써서 해결한다(델파이가 이런식으로 해결하는데... 근데 이거 참 더럽다. 닷넷에선 쓰기가. Native 에선 쉽게 쓸 수 있지만..)
2. this.Invoke 대신 this.BeginInvoke 를 사용한다.
Invoke 가 SendMessage 라면 BeginInvoke 는 PostMessage 라 할 수 있다. 전역데이터를 사용할 수 없고그때그때 메모리를 할당해서 Post 해야하는 부담이 잇지만(안그럼 충돌나는거지 뭐...) 난 사실 이쪽이 더 익숙하다.