.net - 处理另一个类中的事件

标签 .net vb.net class events event-handling

我正在尝试将一些代码移动到一些类文件中以清理我的代码。我遇到问题的一个方面是报告执行任务的对象和进度条之间的事件进度。

我猜事件函数必须放在新类中,但它们还需要更新调用表单上的进度条?类\对象可以返回更新代替事件处理程序吗?

目前该表单具有所有代码:

Function DoRestore(ByVal SQLServer As String, ByVal BackupFilePath As String, ByVal DatabaseName As String)
    Dim Server As Server = New Server(SQLServer)
    Server.ConnectionContext.ApplicationName = Application.ProductName
    Dim res As Restore = New Restore()
    Dim dt As DataTable

        res.Devices.AddDevice(BackupFilePath, DeviceType.File)
        dt = res.ReadFileList(Server)
        res.Database = DatabaseName
        res.PercentCompleteNotification = 1
        AddHandler res.PercentComplete, AddressOf RestoreProgressEventHandler
        AddHandler res.Complete, AddressOf RestoreCompleteEventHandler

        res.SqlRestoreAsync(Server)
        While res.AsyncStatus.ExecutionStatus = ExecutionStatus.InProgress
            Application.DoEvents()
        End While

End Function



Private Function RestoreProgressEventHandler(ByVal sender As Object, ByVal e As PercentCompleteEventArgs)
 'Update progress bar (e.Percent)
End Function



Private Sub RestoreCompleteEventHandler(ByVal sender As Object, ByVal e As Microsoft.SqlServer.Management.Common.ServerMessageEventArgs)
'Signal completion
End Sub

通过以下方式使用:
DoRestore(SQLServer, "C:\SQLBACKUP.bak", DatabaseName)

最佳答案

你应该在你的类中定义一个事件并处理表单中的进度条更新(假设是 WinForms?) - 这里的重点是该类关注备份某些东西 - 它不应该有任何进度条的概念:

在类中定义事件:

Public Event ReportProgress(byval progress as integer)

进行备份时根据需要引发此事件:
RaiseEvent ReportProgress(value)

在调用代码中,您要么需要
  • 使用 WithEvents 定义一个类:
    Private WithEvents Backup As BackupClass
    

    然后对事件采取行动:
    Private Sub Backup _ReportProgress(progress As Integer) Handles Backup.ReportProgress
        Debug.WriteLine("Progress:" + progress.ToString)
    End Sub
    
  • 或者手动添加一个处理程序:
    Private Sub Backup_ReportProgressHandler(progress As Integer)
        Debug.WriteLine("Progress Handler:" + progress.ToString)
    End Sub
    
    AddHandler Backup.ReportProgress, AddressOf Backup_ReportProgressHandler
    
  • 关于.net - 处理另一个类中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285410/

    相关文章:

    ruby - 如何在不计算重新分配的情况下计算类的实例?

    c# - 在 .Net Framework 中使用最新版本的 System.Net.Http

    .net - 'Microsoft.Jet.OLEDB.4.0' 提供程序未在 VB.net 项目的本地计算机上注册

    .net - 在 VB.NET .NET 4.61 中使用 Cert.pem 作为客户端证书用于转发代理

    java - 当子类尝试使用对象时,对象具有空值。为什么?

    c# - OOP 接口(interface)和基类

    asp.net - .NET SQL 连接池如何在多节点环境中扩展?

    C# 相当于 std::sort 和 std::unique

    javascript - 在 JavaScript 中访问 table.id

    arrays - 在 Visual Basic 2010 Express 中解码 JSON