0

我似乎无法在线找到解决此问题的好方法。我有一台运行 Windows Embedded Handheld 6.5 的设备。我运行位于下面的解决方案

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

我将代码部署到我的设备,而不是模拟器,并且代码因空引用异常而中断

Invoke(updateDataHandler);

我看到的解决方案建议将其更改为以下

BeginInvoke(updateDataHandler);

但现在代码在 Main 处出现 NullRefreceException 中断。

Application.Run(new Form1());

有没有人找到解决方案?

4

1 回答 1

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/

该示例的主要问题是它不使用回调(委托)来更新 UI。如果从后台线程触发事件处理程序,则处理程序不能直接更新 UI。这是我一直用来从处理程序更新 UI 的方法:

    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";
        }
    }
于 2016-09-28T12:00:49.800 回答