Programming/c# & winform2021. 10. 19. 17:18

쓰레드 만들어서 하는걸 해보지 않았으니 이런 경험을 다해보네 ㅠㅠ

(너무 늦었어!!!)

 

일단 UDP 소켓을 통해서 받은걸 UI에 쓰려고 했는데

UDP 소켓은 별도의 쓰레드로 생성해서 blocking 함수를 통해 받아오게 되어있다 보니

어떻게 보면 당연한거지만..

UDP 소켓 쓰레드에서 UI의 컨트롤 함수로 직접 접근을 하면 아래와 같은 에러가 발생하면서 죽어 버린다.

정확하게는 그냥 원인불명으로 죽어서, 디버거로 찍고 실행하니 이런 메시지가 발생한다.

System.InvalidOperationException: '크로스 스레드 작업이 잘못되었습니다. 'textBox1' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.'

 

아무튼 아래와 같은 부분이 있어서 머야? 하고 빼버리긴 했었는데

이런 이유로 쓰레드에서 UI 쓰레드로 던지기 위해 invoke 해주는 함수를 거쳐서 던질 수 있게 하는 듯

this.BeginInvoke((Action<string>)DataReceivedUI, receivedMsg);

        private void DataReceivedUI(string data)
        {
            textBox1.Text += (data + "\n");
        }

[링크 : https://m.blog.naver.com/iconms1/221956474085]

 

근데, 키보드막 연타로 때리니 버벅댄다.

긴 걸 한번에 붙이는건 문제 없는걸 봐서, 저 함수를 이용하는건 쓰면 안 될 지도?

'Programming > c# & winform' 카테고리의 다른 글

Dispatcher / Control BeginInvoke()  (0) 2021.10.20
this.BeginInvoke()가 느려!  (0) 2021.10.20
winform 쓰레드와 소켓  (0) 2021.10.18
C# 트레이 아이콘 예제  (0) 2021.10.18
CGridctrl setitembkcolour  (0) 2021.09.01
Posted by 구차니