He estado buscando y he encontrado que una buena manera de realizar trabajos en segundo plano y actualizar la GUI es utilizando trabajadores en segundo plano. Sin embargo, al hacer esta pequeña tarea (estúpida) (contando de 1 a 10000), ¡no actualiza el contenido de la etiqueta, sino que lo imprime en la depuración! (Esto es sólo una solución pico para otro proyecto, por supuesto ...)Actualizar GUI usando BackgroundWorker
Aquí está el código:
public partial class MainWindow : Window
{
BackgroundWorker bw = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.WorkerReportsProgress = true;
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("DONE");
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label1.Content = "going here: "+e.ProgressPercentage;
Debug.WriteLine(e.ProgressPercentage);
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i=0; i < 10000; i++)
{
bw.ReportProgress((i*100)/10000);
}
}
}
+1. Muy bien. Además, agregar 'Thread.Sleep (10);' ayudará. – Aliostad
¡Believe or not, en realidad lo estaba pensando antes de ver tu comentario! Siente por completo que la UI se congela con tanto llama ... –
Por supuesto, es más fácil vincularse a una propiedad y actualizarla desde el hilo de trabajo. – Stimul8d