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 :

mon appli ne répond plus pendant l'insertion dans la BDD


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut mon appli ne répond plus pendant l'insertion dans la BDD
    Bonjour à tous,

    mon soucis est clair je pense, mon application ne répond pas lors de l'insertion de données dans une BDD. en fait mon appli insert une grande quantités de données dans une BDD SQL Server 2005. cela prend plusieurs minutes (c'est normal ça) et j'affiche une progressBar pour visualiser l'avancement de l'insertion.

    tant que je ne touche pas à l'application (clique n'importe ou sur la fenêtre) la progressBar fait son boulot. mais si je clique, Windows fige mon programme (donc progressBar bloquée également) jusqu'a la fin de l'insertion.

    donc si vous avez une solution à mon problème, merci de m'aider, je vous en serrais très reconnaissant

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Il te faudrait faire l'insertion de données dans un autre thread et faire la mise à jour de la progressBar via l'appel de la méthode Invoke.

    Car là, vu que tu fais tout dans le même thread, ça bloque l'interface graphique le temps de gérer les données.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut
    tout d'abord, merci de ta réponse.

    n'aurais-tu pas un exemple de l'utilisation de la méthode Invoke ? je comprend pas l'exemple dans l'aide de VS2005.

    j'ai crée le thread qui fait l'insertion et dans ce thread il faut que j'appelle ma progressBar avec la méthode Invoke() ?

    j'ai éssayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ProgressBar pb = Invoke(this.pbIntegrer);
    pb.Minimum = 0;
                pb.Maximum = viewGenerated.Items.Count;
                pb.Value = 0;
                pb.Step = 1;
    mais ça ne compile pas, l'argument de Invoke() n'étant pas bon.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    utilise un backgroundworker plutot, y a un event qui sert à faire passer l'avancement, que tu auras juste à mettre dasn ton progressbar
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut
    oui, j'utilise déjà un backgroundworker. c'est un thread aprés tout.

    par contre je ne peu pas utiliser la method d'avancement car j'ai 2 progressbar en fait, et j'ai également besoin d'accéder à un listView depuis le thread.

    je commence à comprendre le principe des delegates et de la methode Invoke(). mais j'ai encore un petit soucis.

    j'ai une methode qui retourne la liste des éléments sélectionnés d'une listView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private delegate ListView.SelectedListViewItemCollection DGetGeneratedListView();
            private ListView.SelectedListViewItemCollection GetGeneratedListView()
            {
                return viewGenerated.SelectedItems;
            }
    je m'en sert pour un foreach dans mon thread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (ListViewItem v in (ListView.SelectedListViewItemCollection)this.Invoke(new DGetGeneratedListView(GetGeneratedListView)))
                {
    mais à l'exécution du thread j'ai un exception sur le foreach me disant que le thread à éssayé d'accéder à viewGenerated alors que c'est interdit (en gros). alors que je ne fait plus référence à viewGenerated mais seulements aux delegates.

    de plus, j'invoke déjà un autre delegate juste avant qui lui fonctionne parfaitement.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 136
    Par défaut
    j'ai modifié la méthode permettant de récupérer les élément de la listView comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private delegate ListView.SelectedListViewItemCollection DGetGeneratedListView();
            private ListView.SelectedListViewItemCollection GetGeneratedListView()
            {
                return itemcol;
            }
    itemcol est renseigné au clique sur un bouton. donc en théorie ma méthode et son delegate n'ont aucun contact avec ma ListView. mais j'ai toujours la même exception :

    Opération inter-threads non valide : le contrôle 'viewGenerated' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

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

Discussions similaires

  1. [EasyPHP] Mon phpadmin ne répond plus
    Par dzidzeme dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 26/10/2010, 14h16
  2. Mon Vaio ne répond plus a la commande <<Arrêter>>
    Par CielRose dans le forum Windows XP
    Réponses: 3
    Dernier message: 30/01/2008, 14h14
  3. [eVC++4] Mon appli ne compile plus
    Par Bason_sensei dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/09/2006, 13h47
  4. Réponses: 14
    Dernier message: 17/08/2006, 10h29
  5. [debutant]insertion dans une BDD
    Par EssaiEncore dans le forum ASP
    Réponses: 7
    Dernier message: 10/02/2005, 14h58

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