프로그래밍언어/VB.NET

VB.NET 크로스스레딩 컨트롤 함수

부산딸랑이 2014. 6. 12. 13:13
뭔가 스레드 작업할때마다 델리게이트 만들고 하는 것이

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

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

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

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

설명    : 크로스 스레드 에러가 발생시 사용할 델리게이트 연계 유틸 함수
사용법 : 코드에서 컴포넌트에 직접 값을 주지않고 아래 사용함수를 이용하여 값을 변경해야함.
            스레드사용중 메인폼의 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
'http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=45&MAEULNO=18&no=512&page=1

'프로그래밍언어 > VB.NET' 카테고리의 다른 글

VB.NET 실행중인 전체 프로세스 취득  (0) 2014.06.12
VB.NET 윈도우폼 이벤트 순서  (0) 2014.06.12
VB.NET Wav 파일로 녹음  (0) 2014.06.12
VB.NET 마우스후킹  (0) 2014.06.11
피카사 api-1  (0) 2014.05.29