Monzingo
Monzingo

Reputation: 411

Windows Moible 6.5 SDK GPS Sample Bugged

I cannot seem to find a good solution for this issue online. I have a device that is running Windows Embedded Handheld 6.5. I run the solution located at below

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

I deploy the code to my device, not an emulator, and the code breaks with a null reference exception at

Invoke(updateDataHandler);

The solution ive seen recommends changing this to below

BeginInvoke(updateDataHandler);

But now the code breaks at Main with NullRefreceException.

Application.Run(new Form1());

Has anyone found a solution for this?

Upvotes: 0

Views: 76

Answers (1)

josef
josef

Reputation: 5959

Did you alter the code? updateDataHandler is initialized in Form_Load:

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

so that object will not be NULL. But there are other annoyances with the code, especially the Samples.Location class. You may instead use http://www.hjgode.de/wp/2010/06/11/enhanced-gps-sample-update/ as a starting point and the older one: http://www.hjgode.de/wp/2009/05/12/enhanced-gps-sampe/

The main issue with the sample is that it does not use a callback (delegate) to update the UI. If an event handler is fired from a background thread, the handler can not directly update the UI. Here is what I always use to update the UI from a handler:

    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";
        }
    }

Upvotes: 1

Related Questions