我有一个包含以下代码的按钮:
private void install_btn_Click(object sender, RoutedEventArgs e)
{
installcover.Visibility = System.Windows.Visibility.Visible;
loading_text.Visibility = System.Windows.Visibility.Visible;
back_btn.Visibility = System.Windows.Visibility.Hidden;
install_btn.Visibility = System.Windows.Visibility.Hidden;
loading_text.Text = "Connecting to server...";
mapDriveX();
loading_text.Text = "Copying test tools from server...";
CopyTestTools();
loading_text.Text = "Installing Drivers...";
installDrivers();
loading_text.Text = "Disconnecting...";
unMapDriveX();
loading_text.Text = "Restarting...";
Process.Start("shutdown", "/r /t 10");
}
Run Code Online (Sandbox Code Playgroud)
看起来它试图同时启动所有这些.
即使我放在线Thread.Sleep(5000);
之间,它仍然没有等待.
它不会一个接一个地改变文本; 我在最后看到的只是命令的结果:
loading_text.Text = "Restarting...";
Run Code Online (Sandbox Code Playgroud)
不,这是预期的行为.刷新UI是通过paint事件完成的; 在方法完成之前,它无法处理paint事件.如果你想在后台做的事情,看看之类的东西BackgroundWorker
,ThreadPool
或Task
.请记住,在工作人员上完成的任何工作都无法与UI通信 - 并且需要通过Control.Invoke
/ 特别请求访问Control.BeginInvoke
.