뭔가 스레드 작업할때마다 델리게이트 만들고 하는 것이 'http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=45&MAEULNO=18&no=512&page=1
귀찮아서 함수 몇개 만들어 모듈로 추가해서 사용합니다.
간단한 델리게이트를 이용한 함수입니다.
첨부파일을 프로젝트에 모듈로 추가하시면 됩니다.
간단한 내용이니 추가적인 콤포넌트들은 직접수정해 사용하시면 될것 같습니다.
설명 : 크로스 스레드 에러가 발생시 사용할 델리게이트 연계 유틸 함수
사용법 : 코드에서 컴포넌트에 직접 값을 주지않고 아래 사용함수를 이용하여 값을 변경해야함.
스레드사용중 메인폼의 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
'프로그래밍언어 > 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 |