이 질문의 제목에 접근하는 방법에 대해서는 확신하지 못했기 때문에 의심을 분명히하기를 희망하면서 상황을 설명하겠습니다. (제목에 대한 더 나은 제안이 있다면 그것을 바꿀 것입니다.)대리자 메서드의 매개 변수로 컨트롤
지난 며칠 동안 나는 그 시나리오를 사용하여 멀티 스레딩과 GUI 컨트롤 수정에 대해 읽었습니다. 제 질문은 컨트롤을 내 대리자 및 메서드의 매개 변수로 변경하여 전달하는 것과 관련이 있습니다. 의가 나는 ListView1 있다고 가정 해 봅시다 내가 거기에 그룹을 추가 할 내가 본 실시 예에 따르면, (이것은 단순한 경험 그리고 몇 가지 코드가)
을 할 수있는 방법이 될 것
Private Delegate Sub ResultsAddGroup_Delegate(ByVal FondsGroup As ListViewGroup)
Private Sub ResultsAddGroup(ByVal FondsGroup As ListViewGroup)
If Me.ListView1.InvokeRequired Then
Dim d As New ResultsAddGroup_Delegate(AddressOf ResultsAddGroup)
Dim ParamArgs() As Object = New Object() {FondsGroup}
Me.ListView1.BeginInvoke(d, ParamArgs)
Else
Me.ListView1.Groups.Add(FondsGroup)
End If
End Sub
일반적으로 컨트롤을 매개 변수로 전달하여 코드를 명확하게 유지하고 메서드 나 함수를 특정 컨트롤 개체에서 멀리 떨어 뜨리는 것이 좋습니다. 내가 같이, 위의 경우에 매개 변수로 ListView를 전달하고 싶었다면 : 멀티 스레딩 및 제어 목적을 변경하는 문제의 어떤 종류를 나타냅니다
Private Delegate Sub ResultsAddGroup_Delegate(ByVal LView As ListView, ByVal FondsGroup As ListViewGroup)
Private Sub ResultsAddGroup(ByVal LView As ListView, ByVal FondsGroup As ListViewGroup)
If LView.InvokeRequired Then
Dim d As New ResultsAddGroup_Delegate(AddressOf ResultsAddGroup)
Dim ParamArgs() As Object = New Object() {LView, FondsGroup}
LView.BeginInvoke(d, ParamArgs)
Else
LView.Groups.Add(FondsGroup)
End If
End Sub
겠습니까? 그렇다면 컨트롤을 지정하지 않고이 작업을 수행 할 수있는 다른 방법이 있습니까?
또 다른 참고 사항, 내가 일반적으로 내 방법 (위에서 설명한대로 컨트롤을 매개 변수로 전달)에 어떤 문제가 있습니까?
감사합니다.
그래, 나는 그렇게 생각하지만, 확실하지 않기 때문에 나는 나보다 많은 경험을 가진 사람의 의견을 기다리고 있었다. 코드에 대해서는 두 번째 코드 블록에서 볼 수 있듯이 복사/붙여 넣기 실수였습니다. 입력 해 주셔서 감사합니다. – Deltint