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 :

Application en tâche de fond


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut Application en tâche de fond
    Bonjour,

    je souhaite faire tourner une application en tâche de fond sur mon PDA (Pocket PC).

    Pour l'instant j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Threading.Timer clock = new Timer(new TimerCallback(writePosition), null, 0, 10000);
    System.Threading.Thread.Sleep(Timeout.Infinite);
    Ca remplit bien son job, seulement j'ai un petit inconvénient, quand je lance l'application, j'ai le curseur du PDA qu'est en mode "Sablier" (une roue qui tourne) mais dès que je change de dossier, ce dernier disparaît.

    Y a t-il un moyen d'optimiser la mise en tâche de fond afin que je n'ai plus ce souci de tablier?

    Attention, j'utilise le Compact Framework

    Merci à toute personne pouvant me venir en aide.
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    Expert confirmé
    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
    Par défaut
    Je me demande ce que ça fait ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(!FinDeLapplication)
    {
      Application.DoEvents();
      Thread.Sleep(10);
    }
    à la place de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.Sleep(Timeout.Infinite);
    ...

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    ça donne que je suis en application Console et donc "Application" n'est pas disponible...



    Tiens, par ailleurs, comment la quitter proprement cette application?

    Pour l'instant, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.CurrentThread.Abort();
    à défaut de mieux vu que Environment.Exit() n'est pas dispo, Application.Exit() non plus


    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Expert confirmé
    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
    Par défaut
    Rah t'es embêtant avec ton Compact Framework

    Mais je continue sur ma lancée pour vérifier (vu que j'ai pas de Pocket PC). Donc si on code soit même la fonction DoEvents sur Windows normalement ça doit être ça :
    Code c# : 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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    [StructLayout(LayoutKind.Sequential)]
            struct MSG
            {
                public IntPtr hwnd;
                public UInt32 message;
                public IntPtr wParam;
                public IntPtr lParam;
                public UInt32 time;
                public POINT pt;
            }
     
            [StructLayout(LayoutKind.Sequential)]
            struct POINT
            {
                public int X;
                public int Y;
     
                public POINT(int x, int y)
                {
                    this.X = x;
                    this.Y = y;
                }
     
                public static implicit operator System.Drawing.Point(POINT p)
                {
                    return new System.Drawing.Point(p.X, p.Y);
                }
     
                public static implicit operator POINT(System.Drawing.Point p)
                {
                    return new POINT(p.X, p.Y);
                }
            }
     
            [DllImport("user32.dll")]
            static extern bool TranslateMessage([In] ref MSG lpMsg);
     
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin,
               uint wMsgFilterMax);
     
            [DllImport("user32.dll")]
            static extern IntPtr DispatchMessage([In] ref MSG lpmsg);
     
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin,
               uint wMsgFilterMax, PeekMessageParams wRemoveMsg);
     
            [Flags]
            public enum QueueStatusFlags : uint
            {
                QS_KEY = 0x0001,
                QS_MOUSEMOVE = 0x0002,
                QS_MOUSEBUTTON = 0x0004,
                QS_POSTMESSAGE = 0x0008,
                QS_TIMER = 0x0010,
                QS_PAINT = 0x0020,
                QS_SENDMESSAGE = 0x0040,
                QS_HOTKEY = 0x0080,
                QS_ALLPOSTMESSAGE = 0x0100,
                QS_RAWINPUT = 0x0400,
                QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON,
                QS_INPUT = QS_MOUSE | QS_KEY | QS_RAWINPUT,
                QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY,
                QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE
            }
     
            [Flags]
            public enum PeekMessageParams : uint
            {
                PM_NOREMOVE = 0x0000,
                PM_REMOVE = 0x0001,
                PM_NOYIELD = 0x0002,
                PM_QS_INPUT = QueueStatusFlags.QS_INPUT << 16,
                PM_QS_POSTMESSAGE = (QueueStatusFlags.QS_POSTMESSAGE | QueueStatusFlags.QS_HOTKEY | QueueStatusFlags.QS_TIMER) << 16,
                PM_QS_PAINT = QueueStatusFlags.QS_PAINT << 16,
                PM_QS_SENDMESSAGE = QueueStatusFlags.QS_SENDMESSAGE << 16
            }
     
            public virtual void DoEvents()
            {
                MSG pMsg;
     
                while(PeekMessage(out pMsg, IntPtr.Zero, 0, 0, PeekMessageParams.PM_REMOVE))
                {
                        TranslateMessage(ref pMsg);
                        DispatchMessage(ref pMsg);
                }
            }
    Après c'est Windows CE, donc tout les user32.dll des DllImport doivent être remplacés par coredll.dll.

    Dit moi si ça marche ...

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Hum, dis, tu me tape si je te dis que :

    n'est pas dans le CF?

    Tu peux, mais pas trop fort...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  6. #6
    Expert confirmé
    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
    Par défaut
    Si il y es forcément, c'est toi qui n'as pas rajouté une référence vers System.Drawing.dll.

    Ceci dit ce n'est pas important, tu peux virer
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public static implicit operator System.Drawing.Point(POINT p)
                {
                    return new System.Drawing.Point(p.X, p.Y);
                }
     
                public static implicit operator POINT(System.Drawing.Point p)
                {
                    return new POINT(p.X, p.Y);
                }

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

Discussions similaires

  1. [WD15] Application en tâche de fond
    Par Trusty823 dans le forum WinDev
    Réponses: 0
    Dernier message: 27/07/2013, 12h56
  2. [WD17] Piloter une application en tâche de fond
    Par PaulNero dans le forum WinDev
    Réponses: 14
    Dernier message: 30/07/2012, 08h47
  3. application en tâche de fond
    Par Metrica dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/03/2011, 22h28
  4. application en tâche de fond
    Par lolodev dans le forum Java ME
    Réponses: 3
    Dernier message: 14/08/2007, 03h34
  5. executable en "tâche de fond"
    Par jaquet_vincent dans le forum Windows
    Réponses: 5
    Dernier message: 22/10/2004, 14h49

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