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

VB.NET Discussion :

Demande conseil avant d'attaquer projet backgroundworker


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut Demande conseil avant d'attaquer projet backgroundworker
    Bonjour,

    J'aimerais vous demander conseil avant de m'embarquer dans ce projet!

    Le but

    Je dois ramener depuis une api web des informations sur les films présents sur l'ordinateur de l'utilisateur.

    Il y aura les titres qui ne posent pas de problèmes et qui seront ajouté directement
    ...et puis il y a ceux sur lesquels il y a un doute concernant le titre et où l'utilisateur devra intervenir pour choisir parmi une liste de proposition.

    Les nécessités

    Je voudrais que la recherche puisse se faire dans un backgroundworker pour, notamment, qu'une barre de progression et l'affichage du titre courant soient alimentés.
    Quand il y a demande d'intervention de l'utilisateur, la liste des propositions est affichée dans un listview, dans l'interface principale.

    Mon problème (et l'objet de ma question)

    Comment dois-je m'y prendre pour que le backgroundworker (une boucle qui scanne tous les films présents et essaie de trouver une analogie avec la base de donnée WEB)
    se mette en 'pause' d'une certaine façon, que les propositions soient affichées dans le listview (qui est sur le thread principal), que l'utilisateur puisse cliquer sur une des propositions
    et que cette proposition soit retournée au backgroundworker ?

    Il se peut que mon approche ne soit pas la bonne..et c'est aussi l'objet de ma demande de conseil! ;-)

    Merci pour toute l'aide que vous voudrez bien me donner!!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Imaginons tu as une grosse collection de films tu va commencer le traitement, le type se casse de son pc et le traitement est en pause des le premier film ?

    Ce que je ferai c'est importer les film dans dnas le background worker vers le site et tous les films oncorrectes sont stockes dans une zone tampon.

    Comme ca a tout moment l'utilisateurr peut corriger ses films pour les faire sortir de la zone tampon: pendant le traitement ou apres.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    importer les film ...vers le site
    Merci pour cette première intervention..mais c'est bien l'inverse qui se passe:
    une base de donnée est chargée depuis le web...et les films sont confrontés à cette base de donnée!!

    Il m'apparait utile aussi de préciser que c'est au niveau technique que ma question se pose:
    comment, alors que l'on est dans un backgroundworker (qui n'a pas accès au éléments de l'interface qui ont été créé dans le thread principal):
    1. envoyer malgré tout des données dans un listview (ca je vois plus ou moins)
    2. mettre le backgroundworker en 'pause' pendant que l'utilisateur fait son choix dans un listview
    3. renvoyer ce choix et reprendre le backgroundworker

    Merci,

  4. #4
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 196
    Points : 331
    Points
    331
    Par défaut
    Moi je ferais un boucle dans un task, avec un boolean pour la pause et je notifierais l'interface graphique via le Dispatcher.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Bool isSuspended = false;
    Task matchTask = new Task(new Action(delegate () {
       // le code de ta boucle qui matche les film avec dedans
          If (isSuspended)
          { Thread.Sleep(100);}
    }));
    matchTask.Start();

    Pour la notification de l'interface graphique je te laisse regarder la classe Dispatcher.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    re,

    desole pour le sens j'avais mal compris, mais le principe peu rester.

    Si toutefois tu veux rester sur le background worker, oui c'est possible de mettre a jour l'UI, il fait que ton backgound worker lance un evenement qui l'ui s'abonne a l'evenement et que tu force la mise a jour de l'UI, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void RealTimeService_DataRecieved(object sender, EventArgs e)
    {
       var eventArgs = e as EventArgs<DataReceivedRealTime>;
       Dispatcher.BeginInvoke((Action)(() =>
      {
          lblCallCount.Content = eventArgs.Text;
      }));
    }

    Pour les questions 2 et 3 je n'avais pas utilise le background worker mais une task pour faire l'affaire.

Discussions similaires

  1. [MySQL] Besoin de conseils avant de commencer projet
    Par spawns dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/09/2013, 12h08
  2. Conseil avant projet - Reporting MS NAV
    Par FILK78 dans le forum Modélisation
    Réponses: 3
    Dernier message: 21/05/2013, 11h47
  3. [débutant] demande de conseils avant une formation
    Par Dia_FR dans le forum ASP.NET
    Réponses: 9
    Dernier message: 30/01/2008, 13h49
  4. [Portable] Demande conseils avant achat
    Par GyZmoO dans le forum Ordinateurs
    Réponses: 11
    Dernier message: 08/01/2008, 21h23
  5. Projet WEB : demande conseil et avis !
    Par xG-Hannibal dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 04/03/2006, 21h03

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