提升一个从不同类中更改表单的事件

时间:2012-12-05 17:27:15

标签: vb.net winforms events event-handling

我想知道是否可以制作并将类别中的事件提升为表格?我有一个不断循环的类,但是当条件满足时,我想要一个按钮在表单上可见。我正在研究实现这一目标的不同方法。值得一提的是,我是多线程的,并且这个循环是在与UI不同的线程中运行的。这就是为什么我希望有可能引发一个事件,然后跳转到UI线程并使按钮可见,然后回到它在循环中的位置。

任何建议或方向表示赞赏。

2 个答案:

答案 0 :(得分: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,那么表格处理来自任何来源的事件都没有问题。

答案 1 :(得分: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()

  • 检查语法,因为我输入了它。