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 :

MVVM pour ouvrir un fichier


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Points : 6
    Points
    6
    Par défaut MVVM pour ouvrir un fichier
    Bonjour tout le monde,

    j'aurais besoin d'aide sur l'architecture MVVM. J'ai trouvé beaucoup d'exemple et de tutoriel sur cette architecture, mais je n'ai pas trouvé une qui disait comment ouvrir un fichier, Excel dans mon cas.

    En fait ce que je souhaite faire c'est lorsque l'utilisateur ouvre le .exe de mon programme, l'architecture charge lors de son ouverture, le contenu du fichier Excel, de préférence en background. Car je veux l'utiliser en lecture pour des recherches d'informations, et je ne dois pas modifier ou ajouter d'informations sur ce fichier.

    Voici actuellement à quoi ressemble mon architecture.
    ne vous souciez pas du fichier LangResource, il n'est pas dans la MVVM.
    Nom : picture1.png
Affichages : 113
Taille : 7,0 Ko


    ExcelReader
    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
     
    class ExcelReader
        {
            private DataTable feuille1;
     
            private static object lockObject = new object();
            private static ExcelReader instance;
     
            public static ExcelReader Instance()
            {
                lock (lockObject)
                {
                    if (instance == null)
                    {
                        instance = new ExcelReader();
                    }
                    return instance;
                }
            }
     
     
            public static bool Init()
            {
                //lecture du fichier Excel
                return false;
            }
    }

    Excel Service
    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
    35
    36
    37
    38
    39
    40
    41
    42
     
        class ExcelService
        {
            private static object lockObject = new object();
            private static ExcelService instance;
            private readonly IList<ExcelExchange> table = new List<ExcelExchange>();
     
     
            private ExcelService() { }
     
            public static ExcelService Instance()
            {
                lock (lockObject)
                {
                    if (instance == null)
                    {
                        instance = new ExcelService();
                    }
                    return instance;
                }
            }
     
            public IList<ExcelExchange> GetAll()
            {
                lock (lockObject)
                {
                    return table.ToList();
                }
            }
     
            public void Init()
            {
     
            }
     
            public void Update()
            {
                lock (lockObject)
                {
                    //Mise à jour d'un DataGrid
                }
            }

    Worker
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
        public class Worker : IDisposable
        {
            public bool IsAlive { get; set; }
     
            public bool Init()
            {
                bool res = ExcelReader.Init();
                return false;
            }
     
     
            public void Execute()
            {
                Task.Factory.StartNew(() =>
                {
                    IsAlive = true;
                    DoExecute();
                });
            }
     
            private void DoExecute()
            {
                while (IsAlive)
                {
                    Task.Factory.StartNew(
                    () =>
                    {
                        //var rates = ExcelService.Instance().GetAll();
                        //var value = ExcelReader.Instance().Get(rate.Code);
     
                        string r = "";
                    }
                    );
                    Thread.Sleep(1000 * 5);
                }
            }
     
            public void Dispose()
            {
                IsAlive = false;
            }
        }
    Cette initialisation peut-elle passer par le worker? Ou dois-je créer un thread spécifique pour la récupération du fichier?

    Je vous remercie.

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    La sélection éventuelle du fichier par l'utilisateur est du ressort de la vue qui transmettra le chemin au VM qui effectuera l'ouverture et le chargement des données.

    Cela peut en effet se faire sur un thread unique autre que le thread UI.
    Regarde du côté du BackgroundWorker qui est la façon standard d'effectuer ce genre de manipulations.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Résolu
    Merci Pragmateek!
    J'ai ajouté le BackgroundWorker et ça fonctionne sans soucis.

    Merci encore .

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

Discussions similaires

  1. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  2. Problème pour ouvrir un fichier avec firefox 2.0
    Par peptofr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/12/2006, 17h37
  3. [vbscript] [msgbox] boutons pour ouvrir des fichiers
    Par D-ude dans le forum VBScript
    Réponses: 8
    Dernier message: 12/12/2006, 16h49
  4. [FPDF] Pb pour ouvrir un fichier pdf sous IE ?
    Par wormseric dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/11/2006, 11h15
  5. probleme pour ouvrir un fichier JPG
    Par kokatrix dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 04/05/2006, 16h53

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