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

Windows Forms Discussion :

appli en arriere plan


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    451
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 451
    Par défaut (Thread) appli en arriere plan
    Bonjour à tous,

    j'ai besoin de réaliser une appli qui detecte le retour d'une mise en veille prolongée sur des postes d'un réseau. Donc une appli qui est active tout le temps qu'un poste est allumé.

    Au premier abord j'ai pensé à réaliser un service windows qui écoutait l'évenement SystemEvents.PowerModeChanged0.
    Mais lors d'une mise en veille, les services sont arretés ... donc mauvaise piste !

    La solution est donc de créer une appli qui tourne en arriere plan sur un poste.

    Quelle serait la meilleure methode selon vous? (j'ai pensé à faire un timer infini mais ca ne me plait pas trop !)

    merci pour votre aide

    Philippe

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    451
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 451
    Par défaut
    On m'a conseillé de faire un thread mais je ne connais pas du tt le principe et je galere un max !

    Pour l'intant j'ai ca mais je suis un peu perdu, j'ai du mal à me rendre compte si mon thread est actif


    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
    Module start
        Private WithEvents m_thread As BackgroundWorker
        Sub main()
            Try
                m_thread = New BackgroundWorker
                'Déclaration des procédure pour gérer les evenements du backgroundworker
                AddHandler m_thread.DoWork, AddressOf m_thread_DoWork
                'Si pas déjà en execution lance le backgoundworker
                If Not m_thread.IsBusy Then m_thread.RunWorkerAsync()
            Catch ex As Exception
            End Try
        End Sub
     
        Private Sub m_thread_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles m_thread.DoWork
            'Recup Thread
            Dim LocThread As BackgroundWorker = CType(sender, BackgroundWorker)
            Try
                ' on ajoute l'evnt changement alim
                AddHandler SystemEvents.PowerModeChanged, AddressOf PowerHandler
                ' tq on annule pas le thread
                While Not LocThread.CancellationPending
     
                End While
            Catch ex As Exception
            End Try
        End Sub
     
        Private Sub PowerHandler(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)
            ' je fait mes traitements
        End Sub
     
    End Module
    Pourriez-vous m'éclaircir sur tout ca

    merci

    Philippe

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Oui ton thread est actif ! QUel est le problème ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    451
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 451
    Par défaut
    Bah en fait avec le code ci-desssus, lorsque je lance mon exe, mon thread semble être fermé par la fermeture de mon appli...


    Avec le code ci-dessous, c'est ok. J'ai deplace la boucle TQ thread actif et la ca fonctionne :

    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
    Private WithEvents m_thread As BackgroundWorker
     
    Sub main()
       m_thread = New BackgroundWorker
       m_thread.WorkerSupportsCancellation = True
     
       AddHandler m_thread.DoWork, AddressOf m_thread_DoWork
     
       If Not m_thread.IsBusy Then m_thread.RunWorkerAsync()
     
       AddHandler SystemEvents.PowerModeChanged, AddressOf PowerHandler
     
       While Not m_thread.CancellationPending 'Controle si arrêt demandé
     
       End While
    End Sub
     
    Private Sub m_thread_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles m_thread.DoWork
     
    End Sub
     
    Private Sub PowerHandler(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)
       Select Case e.Mode
          Case PowerModes.Suspend '*** mise en veille
    	...
          Case PowerModes.Resume '*** retour de mise en veille
    	...
    end sub
    Est-ce la bonne méthode, ou ai-je oublier quelque chose?

    Le fait d'avoir une boucle vide ainsi qu'une methode vide me choque un peu !

    Merci

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par philippe123 Voir le message
    Est-ce la bonne méthode, ou ai-je oublier quelque chose?

    Le fait d'avoir une boucle vide ainsi qu'une methode vide me choque un peu !

    Merci
    La boucle vide en sert à rien ! et sans parler de la méthode vide..... Qu'est ce que tu veux faire exactement ? Arreter le traitement quand on clique sur annuler ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    451
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 451
    Par défaut
    je me doutais bien que j'étais à coté de la plaque!

    je vais essayer d'être + clair.

    Mon but est de créer une application non fenêtrée qui, une fois lancé, ne s'arrête jamais et écoute l'événement PowerChanged.

    une sorte de tâche en arriere plan qui écoute l'evt en question; totalement transparent pour les utilisateurs.

    Un service Windows aurait été parfait mais comme je l'explique au premier post, c'est impossible

    j'espère avoir été un peu plus clair dans mon explication.

    merci pour l'intérêt et le temps consacré à mon post.

    Philippe

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

Discussions similaires

  1. envoyer message clavier vers appli en arriere plan
    Par ilimo dans le forum Windows
    Réponses: 1
    Dernier message: 29/05/2007, 11h01
  2. Installer Interbase en arriere plan depuis delphi
    Par nanaalain dans le forum Bases de données
    Réponses: 9
    Dernier message: 24/11/2003, 14h18
  3. programme en arriere plan
    Par tgx874sah dans le forum Réseau
    Réponses: 4
    Dernier message: 21/11/2003, 13h06
  4. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 10h42
  5. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 21h36

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