我正在尝试使用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最终会显示“恢复数据库”,但直到在恢复完成后才会显示。有什么想法吗?
答案 0 :(得分:2)
你在GUI线程上阻塞,这阻止了它的更新。你可以调用lblStatus.Refresh(),或者将你的Wait转移到后台线程(这最终是正确的)。
答案 1 :(得分:0)
这是一个线程问题。您可以在单独的线程或后台线程上执行此操作。我见过人们使用的一种方法是执行Application.DoEvents(),尽管我通常远离该调用。
答案 2 :(得分:0)
在完成对前台线程的处理并释放它之前,不会对GUI进行更新。您需要在后台线程上执行还原以允许前台线程继续更新GUI。考虑将恢复代码放在单独的方法中并使用ThreadPool.QueueUserWorkItem( ),并传递恢复方法。这将在线程池线程上触发恢复方法。
如果你需要更多的控制线程和通知,你可以使用BackgroundWorker