Изменение ярлыка. Текст заблокирован? - PullRequest
1 голос
/ 18 июня 2009

Я пытаюсь использовать объект Microsoft.SqlServer.Management.Smo.Restore для восстановления базы данных SQL Server 2000. Непосредственно перед началом операции восстановления я изменяю текст метки, чтобы пользователь знал, что происходит. Однако измененный текст не отображается в графическом интерфейсе (т. Е. Текст остается таким же, каким был) до ПОСЛЕ строки fullRestore.Wait ().

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

// Configure fullRestore

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

Странно то, что lblStatus в конечном итоге отображает «Восстановление базы данных», но только после после восстановление завершено. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 18 июня 2009

Вы блокируете поток GUI, который препятствует его обновлению. Вы можете вызвать lblStatus.Refresh () или переместить ожидание в фоновый поток (что, в конечном счете, является правильным решением).

0 голосов
/ 18 июня 2009

Обновление GUI не может произойти, пока вы не закончили обработку в потоке переднего плана и не выпустили его. Вам необходимо выполнить восстановление в фоновом потоке, чтобы позволить приоритетному потоку продолжить обновление графического интерфейса. Попробуйте поместить код восстановления в отдельный метод и использовать ThreadPool.QueueUserWorkItem () и передать метод восстановления. Это вызовет ваш метод восстановления в потоке пула потоков.

Если вам нужен больший контроль над потоком и уведомление о его завершении, вы можете использовать BackgroundWorker

0 голосов
/ 18 июня 2009

Это проблема с потоками. Вы можете сделать это в отдельных потоках или в фоновом потоке. Один из подходов, который я видел у людей, - это создание Application.DoEvents (), хотя я обычно избегаю этого вызова.

...