본문 바로가기

자료

[C#,VB.net] Thread 텍스트박스,레이블 등 값변경

728x90

뭔가 스레드 작업할때마다 델리게이트 만들고 하는 것이

 

귀찮아서 함수 몇개 만들어 모듈로 추가해서 사용합니다.

 

간단한 델리게이트를 이용한 함수입니다.

 

첨부파일을 프로젝트에 모듈로 추가하시면 됩니다.

 

간단한 내용이니 추가적인 콤포넌트들은 직접수정해 사용하시면 될것 같습니다.

 

설명    : 크로스 스레드 에러가 발생시 사용할 델리게이트 연계 유틸 함수

 

사용법 : 코드에서 컴포넌트에 직접 값을 주지않고 아래 사용함수를 이용하여 값을 변경해야함.

            스레드사용중 메인폼의 Label에 글자를 변경하려면아래의 함수들중

           

     dLabelText ( 폼에있는Label의Name , 바꾸려고하는 문자열)  '<-- 이렇게 사용하면됨.

 

 

다운받기 귀찮은 분들을 위해 코드를 표시합니다.

 

드래그해서 복사 붙이기로 모듈에 넣어 사용하셔도 됩니다.

 

 

 

--------   아래는 코드 ----------

 

 

    '설명    : 크로스 스레드 에러가 발생시 사용할 델리게이트 연계 유틸 함수

    '사용법 : 코드에서 컴포넌트에 직접 값을 주지않고 아래 사용함수를 이용하여 값을 변경해야함.

    '사용 함수 리스트

    '

    ' TextBox 용 델리게이트함수

    ' 1   dTextBoxTextAdd  (c As TextBox, s As String)    '텍스트 박스속성을 멀티라인으로 바꾸고 사용할 것.

    '

    ' Label 용 델리게이트함수

    ' 2   dLabelText            (c As Label, s As String)

    '     라벨

    'ProgressBar 용 델리게이트함수

    ' 3   dProgressValue     (c As ProgressBar, i As Integer)

    '

 

    '바로아래 함수와 셋트임

    Delegate Sub DelegateTextBoxAdd(c As TextBox, s As String)

    Public Sub dTextBoxTextAdd(c As TextBox, s As String)

        If c.IsHandleCreated = False Then Exit Sub

        If c.InvokeRequired = True Then

            Dim dlg As New DelegateTextBoxAdd(AddressOf dTextBoxTextAdd)

            Try

                c.Invoke(dlg, New Object() {c, s})

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        Else

            Try

                c.Text = c.Text & s & vbCrLf

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        End If

    End Sub

 

 

    '바로아래 함수와 셋트임

    Delegate Sub DelegateLabelText(c As Label, s As String)

    Public Sub dLabelText(c As Label, s As String)

        If c.IsHandleCreated = False Then Exit Sub

        If c.InvokeRequired = True Then

            Dim dlg As New DelegateLabelText(AddressOf dLabelText)

            Try

                c.Invoke(dlg, New Object() {c, s})

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        Else

            Try

                c.Text = s

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        End If

    End Sub

    '바로아래 함수와 셋트임 

    Delegate Sub DelegateProgressValue(c As ProgressBar, i As Integer)

    Public Sub dProgressValue(c As ProgressBar, i As Integer)

        If c.IsHandleCreated = False Then Exit Sub

        If c.InvokeRequired = True Then

            Dim dlg As New DelegateProgressValue(AddressOf dProgressValue)

            Try

                c.Invoke(dlg, New Object() {c, i})

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        Else

            Try

                c.Value = i

            Catch ex As Exception

                Debug.Print(ex.Message)

            End Try

        End If

    End Sub

 

728x90