在VB.NET自定义控件中添加事件处理程序

3

我有一个场景,需要实现一个UserControl,在点击“Process”按钮后,会启动一个后台工作线程。

我想在“RunWorkerCompleted”事件中触发父窗体的一个函数/方法,这个函数/方法将在该UserControl上添加。

Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
    Try            
        bgwFetchGiftCard.RunWorkerAsync()
    Catch ex As Exception
        WriteLog(ex)
    End Try
End Sub

Private Sub bgwFetchCard_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwFetchCard.DoWork
    Try
        ds = New DataSet()
        'Call ApI Service for Denomination
        ds = APICALL()
    Catch ex As Exception
        WriteLog(ex)
    End Try
End Sub

Private Sub bgwFetchCard_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted
    If ds IsNot Nothing Then
        Result = True   
        'At This Point I Want To Raise Event          
        'RaiseEvent 
    Else
        'ShowMessage("FAIL")
    End If
End Sub

我该如何实现这个?请有心人给予建议。

1
将“Public Event”声明添加到您的代码中,并引发它。在用户控件中隐藏工作线程并不是一个好主意。您需要考虑当用户关闭包含此控件的表单时,工作仍在运行时会发生什么。您不能使用此内容:https://dev59.com/sHI-5IYBdhLWcg3wq6do#1732361。 - Hans Passant
1个回答

3

假设所示代码位于UserControl中,您只需要声明一个事件并引发它(就控件而言并没有什么特别之处):

Public Event SomethingIsDone (sender As Object, e as EventArgs)

...
Private Sub bgwFetchCard_RunWorkerCompleted(sender As Object, 
          e As RunWorkerCompletedEventArgs) Handles bgwFetchCard.RunWorkerCompleted
    If ds IsNot Nothing Then
        Result = True   

         RaiseEvent SomethingIsDone(Me, New EventsArgs()) 

    Else
        'ShowMessage("FAIL")
    End If
End Sub

在需要在事件中传递信息的情况下,定义一个继承自 EventArgs 的自定义 EventArgs 类,并添加所需的属性。请参考以下示例代码:

Public Class SomethingDoneEventArgs
    Inherits EventArgs

    Public Property SomethingName As String

    ' convenience:
    Public Sub New(name As String)
        SomethingName = name
    End Sub
End Class

那么,传递该类的一个实例而不是通用的EventArgs

...
RaiseEvent SomethingIsDone(Me, 
           New SomethingDoneEventArgs("foo")) 

在父表单中的实现? - DareDevil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接