-1

我正在使用以下内容在 VB.NET 中恢复数据库。这可行,但如果用户单击任何内容,则会导致界面锁定。此外,我无法让进度标签以增量方式更新,在备份完成之前它是空白的,然后显示 100%

Sub DoRestore()
    Dim svr As Server = New Server("Server\SQL2008")
    Dim res As Restore = New Restore()
    res.Devices.AddDevice("C:\MyDB.bak", DeviceType.File)
    res.Database = "MyDB"
    res.RelocateFiles.Add(New RelocateFile("MyDB_Data", "C:\MyDB.mdf"))
    res.RelocateFiles.Add(New RelocateFile("MyDB_Log", "C:\MyDB.ldf"))
    res.PercentCompleteNotification = 1
    AddHandler res.PercentComplete, AddressOf ProgressEventHandler
    res.SqlRestore(svr)
End Sub

这种变化是否正确?:

Private Sub ProgressEventHandler(ByVal sender As Object, ByVal e As PercentCompleteEventArgs)
    UpdateProgressBar(e.Percent)
End Sub

Private Sub UpdateProgressBar(ByVal e As String)
    ProgressBar.Value = e
    Status.Text = e.ToString
End Sub
4

1 回答 1

0

您需要使用SqlRestoreAsyncnotSqlRestore来防止它占用您的主线程。

然后为了避免在更新 UI 时出现跨线程操作错误,您可以使用这里的方法。您在表单上创建一个方法,该方法将更新 UI 元素并使用Invoke.

于 2010-06-06T14:08:52.423 回答