2012-06-28 3 views
0

Je travaille actuellement sur une application Windows Mobile 6.5. L'application dispose d'une fonction Bluetooth qui lit les données du port série. Une fois les données lues, le gestionnaire d'événements transmet les données de la classe de niveau inférieur à la vue de l'interface utilisateur. L'interface utilisateur mettrait à jour la valeur et modifierait la couleur de fond du bouton en fonction de la valeur lue sur le port série. Cependant, parfois, le périphérique Bluetooth peut être hors de portée. En d'autres termes, le périphérique de poche ne peut recevoir aucune donnée du périphérique Bluetooth distant.Problème lors de la modification du bouton backcolor à l'aide du gestionnaire d'événements

Lorsque le périphérique est à portée et que le périphérique de poche peut recevoir des données du port série, la valeur reçue et la couleur de fond du bouton changent en fonction de la valeur reçue. Cependant, une fois que le périphérique est à nouveau hors de portée, le gestionnaire d'événements ne fonctionne pas pour une raison quelconque. Par conséquent, seule la valeur change, la couleur de fond du bouton ne peut pas changer via le gestionnaire d'événements.

Si je clique sur ce bouton, la couleur changera à nouveau. Il semble que la couleur ne changera que si le bouton est activé. Je peux confirmer que le problème concernant le gestionnaire d'événements parce que j'ai imprimé le deviceName sur l'étiquette, le gestionnaire d'événements ne se déclenche pas. Quelqu'un peut-il savoir pourquoi cela se produit? ou toute meilleure idée à aborder.

Voici le code que j'utilise pour garder l'écoute du changement backcolor du bouton et son gestionnaire d'événements:

Button[] gauges = new Button[MonitoringGauges.Count()]; // declare the button variable 

    // Create a button for each gauge 
    .....  
    ..... 
    ..... 

    // Constructor 

      for(int k = MonitoringGauges.count -1 ; k >=0 ; k--){ // keep listening to the backcolor change for the button corresponding to the gauge 
       if(MonitoringGauges[k] !=null){ 
        MonitoringGauges[k].TrainingZoneChanged += new Gauge.TrainingZoneChangedEventHandler(x_TrainingZoneChanged); 
       } 
      } 

     // event handler 

     void x_TrainingZoneChanged(string deviceName, string macAddress, Color color){ 
      if(!string.IsNullOrEmpty(deviceName) && !string.IsNullOrEmpty(macAddress) && color !=null){ 
      Button btn = gauges.Where(x =>x.Name.equals(deviceName)).First(); // find the correct button for updating the backcolor of the button 

     if(btn !=null){ 
      btn.Invoke((Action) delegate 
      { 
       if(color == Color.Black){ 
         btn.BackColor = Color.LightBlue; 
       } else{ 
         btn.BackColor = color; 
        } 

      }); 
     } 
     } 
     } 

Merci pour toute aide.

Cordialement,

SW Lau

+0

Etes-vous en train de dire que l'eventhandler ne se déclenche pas, ou dites-vous que l'appel à btn.BackColor n'a pas d'effet notable? – ctacke

+0

L'arrière-plan n'a pas d'effet visible une fois que l'appareil est à nouveau hors plage –

+0

Vous avez donc mis un point d'arrêt sur cette ligne et vous avez vérifié que la ligne de code est en cours d'exécution, n'est-ce pas? – ctacke

Répondre

0

Avez-vous déjà essayé simple btn.Refresh() pour appliquer un nouveau tracé? Peut-être suivi d'un Application.DoEvents();

+0

Salut, josef, j'ai essayé btn.Refresh() lui-même, pas de succès. Voulez-vous dire ajouter Application.Doevents() après btn.Refresh(); –

+0

Salut, serait la raison après être hors de portée, l'interface utilisateur se fige un peu de temps, puis revenir à nouveau, de sorte que le gestionnaire d'événements ne fonctionne pas? –

+0

Salut oui, je veux dire ajouter un Application.DoEvents() après le btn.Refresh(). Le code couleur de votre gestionnaire d'événements a-t-il déjà été appelé? Avez-vous placé un point d'arrêt dans la première ligne du gestionnaire d'événements ("if (! String.IsNullOrEmpty (deviceName) && ...)? I le gestionnaire d'événements a été déclenché par un thread d'arrière-plan? – josef

Questions connexes