-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

メインスレッドを拘束しSqlRestoreAsyncないように使用する必要があります。SqlRestore

次に、UI を更新するときにクロス スレッド操作エラーを回避するために、こちらのアプローチを使用できます。UI 要素を更新するメソッドをフォーム上に作成し、 を使用して非同期ハンドラから呼び出しますInvoke

于 2010-06-06T14:08:52.423 に答える