0

クラスからフォームにイベントを作成して発生させることが可能かどうか疑問に思っていますか?継続的にループするクラスがありますが、条件が満たされたときにボタンがフォームに表示されるようにしたいと思います。私はこれを達成するためのさまざまな方法を検討しています。私はマルチスレッドであり、このループはUIとは異なるスレッドで実行されていることを言及する価値があります。そのため、イベントを発生させることが可能であり、それによってUIスレッドにジャンプしてボタンが表示され、ループ内の場所に戻ることができると期待しています。

任意の提案や方向性をいただければ幸いです。

4

2 に答える 2

3

このようなものはうまくいくでしょう、

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()

イベントが別のスレッドから来ている場合に UI を更新するときに使用することを忘れない限り.Invoke、フォームがどのソースからのイベントを処理しても問題はありません。

于 2012-12-05T18:43:54.847 に答える
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() として呼び出します。

  • 入力した構文を確認してください。
于 2012-12-05T18:21:59.127 に答える