IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de ProgressBar dans une dll


Sujet :

C#

  1. #1
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Problème de ProgressBar dans une dll
    Re-bonjour! J'ai un petit problème qui est entrain de me hanté! Dans mon projet j'ai une dll qui intéragit avec mon application.

    Sur mon application j'ai une progressbar!Mais je veux prendre le contrôle de la ProgressBar à partir de ma dll.

    Voici un bout de code que j'ai taper pour que je l'insère de ma dll à mon application
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    // string NameProgressBar -> Nom de la progressBar
     
    public static void ControlProgressBar(string, InSourceFile, bool UseProgressBar, string NameProgressBar)
    {
            try
            {
                 FileInfo SizeFile = new FileInfo(@InSourceFile);
                 if(!UseProgressBar)
                 {
                         // Action à faire sans la progressBar
                         // C'est pas ça qui m'interesse
                 }
                 else
                 {
                        // J'ai pensé à faire ça au début, mais ça ne fonctionne pas trop
                         ProgressBar InitPB = new ProgressBar();
                         InitPB.Name = NameProgressBar;   // ça ne marche pas pour prendre le contrôle de la progressBar de ma form;
                         InitPB.Maximum = (int)SizeFile.Length;
     
                         int Read;
                         while((Read = InputFile.Read(buffer, 0 , 2048)) > 0)
                         {
                                    // Instruction de sortie
                                    InitPB.PerformStep();  // Permet d'afficher l'état d'avancement de la 
                         }
                 }
            }
            catch
            {
                    // Message d'erreur
            }
    }
    Donc voilà, j'espère que vous pourrez m'aider... Dans l'aide local j'ai trouvé des exemples, mais il y a des choses qui m'ont bloqué


  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Au lieu de passer à ta dll en argument "string NameProgressBar", passe plutôt directement l'objet ProgressBar (System.Windows.Forms.ProgressBar ou un truc du genre).
    Sinon après pour le faire en asynchrone (sans bloquer l'interface) jette un coup d'œil au BackgroundWorker .

  3. #3
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Bonsoir smyley! Ce que je veux c'est que ma dll doit-être complètement indépendante de l'application! Je fait cette dll pour qu'elle soit directement utilisable pour d'autre application. Comme directX ou le style SDLDotNet. Mais j'ai réfléchi un peu et j'ai trouvée que l'on pouvais faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void ControlProgressBar(string InSourceFile, bool UseProgressBar, ProgressBar NameProgressBar)
    {
    
    }
    Le hic, c'est qu'il n'y a pas d'erreur de compilation et qu'il prend en compte le nom de ma progressBar, mais il n'affiche pas ce que je veux.

    Après le lien que tu m'as donnée par rapport au backgroundWorker, j'ai essayé de le refaire mais il indique une erreur interne sur le "pourcent"... Donc voilà, si tu as une autre idée. Mais je pense que dans ControlProgressBar(..........., ProgressBar NameProgressBar) ça peut fonctionner...


  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par terminator59140 Voir le message
    mais il n'affiche pas ce que je veux.
    C'est à dire ?

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    En fait j'aurai fait comme ça :

    Etape 1: Créer & implémenter une interface qui contient la logique pour rapporter la progression.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public interface IFormProgression
    {
      void SetProgress(int position, int maximum);
    }
     
    ...
    public class Form1 : Form, IFormProgression
    {
     public void SetProgress(int position,int maxium)
     {
       if(this.InvokeRequired)
       {
          this.Invoke(new MethodInvoker(delegate
          { 
             SetProgress(position,maxium);
          })); //Au cas où un jour cette form est accédée à partir d'un autre thread
           return;
        }
     
       progressBar1.Maximum = maximum;
       progressBar1.Value = position;
       }
    }
    Etape 2 : Créer la fonction que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void MaFonction(..., IFormProgression form)
    {
      for(int i = 0;i<10;i++)
      {
        form.SetProgress(i,10);
      }
    }
    A la place de la boucle, tu fais ton traitement.

    Et pour l'utiliser à partir de Form1, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction(...,this);

  6. #6
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par smyley Voir le message
    C'est à dire ?
    Ce qui va permette d'avancer ma progressbar. Mais j'ai fait un test sur un label à la place de Mettre ProgressBar, j'avais mis Label, et mis un test comme quoi il devait m'afficher par expemple "Test" qui fut écrit dans la dll.

    Dans ma dll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static void Control(Label Name)
    {
         Name.Text = "Test";
    }
    Puis dans mon application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void Active_Click(object sender, EventArgs e)
    {
         Control(label1); // label1 -> nom de mon label pour le test...
    }

    Ca resembler à quelque chose comme çà. Pour ton autre réponse, je te dirais quoi demain. @+ Et merci pour ton aide


  7. #7
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    En fait ça fonctionne le test du label! Je me suis juste que dans ma dll, je me suis trompé d'endroit à insérer le code pas celui de l'exemple, mais celui que j'avais fait. Pour celui là, il va fonctionner, il suffit juste de la mettre dans une dll puis de l'appeler dans l'application et de mettre juste le name du label. Voilà...


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. .NetTiers | Problème de DAL dans une dll
    Par stephane.julien dans le forum C#
    Réponses: 4
    Dernier message: 25/03/2008, 14h01
  2. [YES::ENGINE]Problème d'exportation dans une dll
    Par trecks dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 30/11/2007, 08h26
  3. Problème Acces Violation dans une DLL d'envoi de mail
    Par Avisseau dans le forum Delphi
    Réponses: 1
    Dernier message: 25/10/2006, 16h48
  4. Réponses: 4
    Dernier message: 16/05/2006, 23h15
  5. Problèmes avec un TWebBrowser dans une DLL
    Par bellamyjc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/01/2005, 22h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo