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

.Invoke如果您的事件来自另一个线程,只要您记得在更新 UI 时使用,那么让表单处理来自任何来源的事件都没有问题。

于 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 回答