본문 바로가기

자료

[VB.net / C#] 크로스 쓰레드 사용법(Invoke)

728x90
this.Invoke(new MethodInvoker(delegate()
{
        ///

                        ///처리 로직

                        ///
              }));

Delegate Sub SetTextCallback(ByVal [text] As String) 'txtPosition.Text 델리게이트 선언

   'txtPosition.Text 델리게이트 선언

    Private Sub SetText(ByVal [text] As String)

        If Me.txtPosition.InvokeRequired Then

            Dim d As New SetTextCallback(AddressOf SetText)

            Me.Invoke(d, New Object() {[text]})

        Else

            ' Me.Label6.Text = [text]

            Me.txtPosition.Text = [text]

        End If

    End Sub

 

 

위의 C# 과 VB.NET 의 적용 방법을 나타내는 것인데 간단하게 하나를 나타 낸다면 이렇게 사용 하면 된다. 

VB.NET 은  txtPosition 이 name 속성인 textbox 를 크로스 쓰레드로 적용한다.

 

 아래 에서 보면 SetText 메서드를 실행할때 관련 textbox 가  invoke 가 필요 한지 확인 한 다음  만약 필요 하다면 델리 게이트로 선언된 것을 d 변수에 셋팅하고 그 델리게이트 변수를 invoke 함수를 이용하여 추출하여 뿌려준다.

만약 필요 없는 부분이라면  바로 txtPosition 텍스트 박스에 뿌려 준다.

 

실제 이런 작업은 여러게의 텍스트 박스에 동시에 부려 지는 것을 막기 위함 으로 미리 선언된 델리게이트는 동시 작업을 막아 주어 쓰레드의 엊갈림을 없애 준다. 

728x90