我正在使用以下内容在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
答案 0 :(得分:0)
您需要使用SqlRestoreAsync
而不是SqlRestore
来阻止它占用主线程。
然后在更新UI时避免交叉线程操作错误,您可以使用the approach here。您在表单上创建一个方法,该方法将更新UI元素并使用Invoke
从您的异步处理程序调用该元素。