0

Я не могу найти подходящее решение для этой проблемы в Интернете. У меня есть устройство под управлением Windows Embedded Handheld 6.5. Я бег решения, расположенное на уровень нижеWindows Moible 6.5 SDK GPS Sample Bugged

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

развернуть код на устройство, не эмулятор, а также разрывы кода с нулевым эталонным исключением на

Invoke(updateDataHandler); 

ив решения видело рекомендую изменить этот до ниже

BeginInvoke(updateDataHandler); 

Но теперь код ломается от Main с NullRefreceException.

Application.Run(new Form1()); 

Кто-нибудь нашел решение для этого?

ответ

1

Вы изменили код? updateDataHandler инициализируется в Form_Load:

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

так, что объект не будет NULL. Но есть и другие неприятности с кодом, особенно класс Samples.Location. Вместо этого вы можете использовать http://www.hjgode.de/wp/2010/06/11/enhanced-gps-sample-update/ в качестве начальной и старшей: http://www.hjgode.de/wp/2009/05/12/enhanced-gps-sampe/

Основная проблема с образцом заключается в том, что он не использует обратный вызов (делегат) для обновления пользовательского интерфейса. Если обработчик событий запускается из фонового потока, обработчик не может напрямую обновлять пользовательский интерфейс. Вот что я всегда использую для обновления пользовательского интерфейса от обработчика:

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