0

Je n'arrive pas à trouver une bonne solution pour ce problème en ligne. J'ai un périphérique qui exécute Windows Embedded Handheld 6.5. Je lance la solution située au-dessousWindows Moible 6.5 SDK GPS Sample Bugged

C:\Program Files (x86)\Windows Mobile 6.5.3 DTK\Samples\PocketPC\CS\GPS 

Je Déployez le code pour mon appareil, pas un émulateur, et les pauses de code avec une exception de référence null à

Invoke(updateDataHandler); 

La solution Ive vu recommande de changer cette à ci-dessous

BeginInvoke(updateDataHandler); 

Mais maintenant le code casse à Main avec NullRefreceException.

Application.Run(new Form1()); 

Est-ce que quelqu'un a trouvé une solution pour cela?

Répondre

1

Avez-vous modifié le code? updateDataHandler est initialisé dans Form_Load:

private void Form1_Load(object sender, System.EventArgs e) 
    { 
     updateDataHandler = new EventHandler(UpdateData); 

afin que l'objet ne soit pas NULL. Mais il y a d'autres ennuis avec le code, en particulier la classe Samples.Location. Vous pouvez utiliser à la place http://www.hjgode.de/wp/2010/06/11/enhanced-gps-sample-update/ comme point de départ et l'ancien: http://www.hjgode.de/wp/2009/05/12/enhanced-gps-sampe/

Le problème principal avec l'exemple est qu'il n'utilise pas de rappel (délégué) pour mettre à jour l'interface utilisateur. Si un gestionnaire d'événements est déclenché à partir d'un thread d'arrière-plan, le gestionnaire ne peut pas directement mettre à jour l'interface utilisateur. Voici ce que j'utilise toujours pour mettre à jour l'interface utilisateur à partir d'un gestionnaire:

delegate void SetTextCallback(string text); 
    public void addLog(string text) 
    { 
     // InvokeRequired required compares the thread ID of the 
     // calling thread to the thread ID of the creating thread. 
     // If these threads are different, it returns true. 
     if (this.txtLog.InvokeRequired) 
     { 
      SetTextCallback d = new SetTextCallback(addLog); 
      this.Invoke(d, new object[] { text }); 
     } 
     else 
     { 
      txtLog.Text += text + "\r\n"; 
     } 
    }