Label.Text更改被阻止?

时间:2009-06-17 21:03:35

标签: c# .net sql-server-2000 label database-restore

我正在尝试使用Microsoft.SqlServer.Management.Smo.Restore对象来还原SQL Server 2000数据库。在我开始还原操作之前,我更改了标签的文本,以便用户知道发生了什么。但是,更改的文本在GUI上不可见(即,文本保持原样),直到fullRestore.Wait()行之后。

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

// Configure fullRestore

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

奇怪的是,lblStatus最终会显示“恢复数据库”,但直到恢复完成后才会显示。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

你在GUI线程上阻塞,这阻止了它的更新。你可以调用lblStatus.Refresh(),或者将你的Wait转移到后台线程(这最终是正确的)。

答案 1 :(得分:0)

这是一个线程问题。您可以在单独的线程或后台线程上执行此操作。我见过人们使用的一种方法是执行Application.DoEvents(),尽管我通常远离该调用。

答案 2 :(得分:0)

在完成对前台线程的处理并释放它之前,不会对GUI进行更新。您需要在后台线程上执行还原以允许前台线程继续更新GUI。考虑将恢复代码放在单独的方法中并使用ThreadPool.QueueUserWorkItem( ),并传递恢复方法。这将在线程池线程上触发恢复方法。

如果你需要更多的控制线程和通知,你可以使用BackgroundWorker