ProgressBar Marquee pendant un programme bloqué

Leucistic Messages postés 61 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 16 juin 2012 - 11 sept. 2009 à 14:20
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 13 sept. 2009 à 09:38
Bonjour,

Je souhaiterais afficher une progressBar infinie lorsque j'execute un programme externe dont la durée d'execution m'est inconnue.
Après quelques recherches, j'ai trouvé la propriété Style de la ProgressBar que l'on pouvait mettre a marquee, et cela fonctionne bien.
En revanche, pour lancer mon programme externe, voici le code :
string LaunchProcess(string filename, string arguments)
{
    ProcessStartInfo info = new ProcessStartInfo( );
    info.FileName = filename;
    info.Arguments = arguments;
    info.UseShellExecute = false;
    info.RedirectStandardOutput = true;
    info.CreateNoWindow = true;

    string output = "";

    try
    {
        Process p = Process.Start( info );
        p.Start( );
        output = p.StandardOutput.ReadToEnd( );
        p.WaitForExit();
        p.Close( );
    }
    catch ( Exception ex )
    {
        MessageBox.Show( ex.ToString( ) );
    }

    return output;
}

Ce qui lance bien mon programme, par contre, si j'affiche ma progressBar juste avant, cette dernière n'apparaît pas. Est-ce que quelqu'un aurait une idée du pourquoi du comment ?


L'ouverture de l'esprit n'est pas une fracture du crâne

3 réponses

cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
11 sept. 2009 à 14:46
Salut,
tu lances ta progressbar dans la même appli ?
es-tu sûr qu'elle n'apparait pas ?
en mode debug ça donne quoi ?


==============================================
Possible meet Impossible to become...Possimpible
==============================================
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 sept. 2009 à 22:47
Je pense que le fait d'attendre la fin du programme lancé bloque et fige ton application.

Il faudrait soit faire l'attente dans un autre thread, soit au contraire faire en sorte d'avoir la progress bar dans un autre thread.

Pour un besoin identique en VB, je me suis fait une petite fenêtre d'attente qui tourne dans un thread séparé.
JE viens de mettre le source sur le site, tu la trouvera ici --> source

C'est une source en VB, mais je pense qu'elle est facilement adaptable en C#


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 sept. 2009 à 09:38
bonjour,
Casy a raison, le fait de faire p.WaitForExit(); bloque l'éxécution du prog. la solution multithread permet de s'en sortir.

une autre solution est de ne pas attendre la fin du process à cet endroit,
- déclarer le process p au niveau de la class
- mettre un timer apres le lancement du process et inhiber les controles de la forme (sauf la progress bar).
- dans le timer click vérifier que le process tourne toujours, dès qu'il s'est arreté, reactiver les controles de la forme.


bon code
C# is amazing, enjoy it!
Rejoignez-nous