J'ai un programme qui prend 10-20 secondes pour démarrer. J'ai besoin de montrer une fenêtre avec une barre de progression quand le programme démarre. Je sais que BackgroundWorker est la bonne façon de le faire mais je n'ai malheureusement pas le temps de retravailler tout le gui en utilisant les threads en ce moment. Voici du code que j'essaie mais ça ne marche pas. Quelqu'un peut-il aider ..?C#, WPF, Mise à jour du gui sans backgroundworkers
using System;
using System.Threading;
using System.Windows;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Thread t = new Thread(ShowLoadingWindow);
t.SetApartmentState(ApartmentState.STA);
t.Priority = ThreadPriority.Highest;
t.Start();
DoSomeLongTask();
keepLooping = false;
}
bool keepLooping = true;
private void ShowLoadingWindow()
{
LoadingWindow lw = new LoadingWindow();
lw.Show();
while (keepLooping)
{
Thread.Sleep(1);
}
lw.Close();
}
private void DoSomeLongTask()
{
for (int i = 0; i < 20000; i++)
{
GC.Collect();
}
}
}
}
La fenêtre de chargement est juste une fenêtre vide avec une barre de progression. Comment cela ne fonctionne-t-il pas?
Vous devez rester avec BackgroundWorker. Il a les hooks nécessaires pour le faire correctement, et à la longue, il sera plus simple et plus rapide de coder que d'essayer de rouler sa propre solution de threading. Vous n'avez pas besoin de retravailler toute l'interface graphique pour le faire fonctionner; vous avez juste besoin d'une tâche d'arrière-plan à exécuter dans le worker. –
Totalement d'accord avec Robert. Je n'ai aucune idée de la façon dont vous envisagez de mettre à jour la barre de progression avec le code indiqué ci-dessus, mais BackgroundWorker le rend trivial. –