2012-12-05 3 views
0

클래스에서 이벤트를 폼으로 만들 수 있는지 궁금합니다. 나는 연속적으로 반복되는 클래스를 가지고 있지만, 조건이 충족 될 때 버튼을 폼에 표시하려고합니다. 나는 이것을 성취하는 다른 방법을 찾고있다. 아마도 멀티 스레딩이고이 루프는 UI가 아닌 다른 스레드에서 실행되고 있음을 언급 할 가치가 있습니다. 그래서 이벤트를 발생시키는 것이 가능하고 UI 스레드로 넘어 가서 버튼이 보이게 한 다음 루프에 있던 곳으로 돌아올 수 있기를 바랍니다.다른 클래스에서 양식을 변경하는 이벤트 발생

모든 제안이나 방향이 좋습니다. 내가 여기 생각

+0

항상 코드를 포함하도록 질문 할 때마다 기억하십시오. –

답변

3

,만큼 당신이 이벤트가 다른 스레드에서 오는 경우 UI를 업데이트 .Invoke를 사용하는 기억으로

Public Class MyClass 

    Public Event MyEvent() 

    Sub DoStuff() 
     RaiseEvent MyEvent 
    End Sub 
Public Class 

Public Class MyForm 

    Public Sub HandleEvent() 
     'can be called from another thread, so use invoke 
     Me.Invoke(Sub() MyButton.Visible = true) 
    End Sub 

End Class 

Dim mMyClass = New MyClass 
Dim mMyForm = New MyForm 

AddHandler mMyClass.MyEvent, AddressOf mMyForm.HandleEvent() 

는 양식 핸들 이벤트를 가진 아무 문제가 없다 모든 출처에서.

0

이 가능한 솔루션입니다 :

1) 매개 변수로 클래스 패스 부모 폼; 그것을 입력으로서 2) 상위 형태

  • 확인 구() 함수 클래스

    Private Delegate Sub DoStuffDelegate() 
    Private Sub DoStuff() 
        If Me.InvokeRequired Then 
         Me.Invoke(New DoStuffDelegate(AddressOf DoStuff)) 
        Else 
         btn.Visible = true 
        End If 
    End Sub 
    

    3)를 호출 parentform.DoStuff로 부른다. 이런 식으로 뭔가가 작동 할