Frage

Ich versuche, ein Microsoft.SqlServer.Management.Smo.Restore Objekt zu verwenden, um eine SQL Server 2000-Datenbank wiederherzustellen. Kurz bevor ich die Wiederherstellung beginnen, ändere ich den Text eines Etiketts, damit der Benutzer weiß, was los ist. Doch der geänderte Text nicht sichtbar auf der GUI ist (das heißt, der Text bleibt das gleiche wie es war) bis nach der fullRestore.Wait () Linie.

lblStatus.Text = "Restoring Database";
Restore fullRestore = new Restore(); 

// Configure fullRestore

fullRestore.SqlRestore(_server);
fullRestore.Wait();

Das Seltsame ist, lblStatus schließlich nicht angezeigt „Wiederherstellen Datenbank“, aber nicht bis nach Wiederherstellung abgeschlossen ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie sind blockiert auf dem GUI-Thread, die es von der Aktualisierung verhindert. Sie können lblStatus.Refresh () aufrufen oder Ihr Warten auf einen Hintergrund-Thread bewegen (was letztlich das Richtige zu tun).

Andere Tipps

Es ist ein Threading-Problem. Sie können dies auf separaten Fäden oder auf einem Hintergrund-Thread. Ein Ansatz, den ich gesehen habe Leute benutzen ist ein Application.DoEvents tun (), obwohl ich in der Regel bleiben weg von diesem Anruf.

Das Update auf die GUI kann nicht auftreten, bis Sie die Verarbeitung im Vordergrund Thread und veröffentlichten es beendet haben. Sie müssen die Wiederherstellung auf einem Hintergrund-Thread zu tun, dem Vordergrundthread zu ermöglichen, die GUI weiterhin aktualisieren. Betrachten Sie den Wiederherstellungscode in einem separaten Verfahren setzen und mit Threadpool .QueueUserWorkItem () und das Verfahren wiederherzustellen geben. Dies löst Ihre Methode auf einem Thread-Pool-Thread wieder herstellen.

Wenn Sie mehr Kontrolle über den Faden und Benachrichtigung müssen, wenn es fertig ist, können Sie eine Background

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top