为Windows Mobile设备创建位置感知的应用程序
2011-01-06 10:59:01 来源:WEB开发网如下的代码展示了如何通过GPSID同步获取位置。
public partial class MainForm : Form
{
private Gps gps;
public MainForm()
{
InitializeComponent();
gps = new Gps();
gps.Open();
}
private void menuExit_Click(object sender, EventArgs e)
{
gps.Close();
Close();
}
private void menuLocation_Click(object sender, EventArgs e)
{
GpsPosition position = gps.GetPosition();
LatLong location = new LatLong();
if (position.LatitudeValid)
location.Latitude = position.Latitude;
if (position.LongitudeValid)
location.Longitude = position.Longitude;
if (position.HeadingValid)
location.Heading = position.Heading;
StringBuilder sb = new StringBuilder();
sb.AppendLine();
sb.Append("Latitude = ");
sb.AppendLine(location.Latitude.ToString());
sb.Append("Longitude = ");
sb.AppendLine(location.Longitude.ToString());
sb.Append("Heading = ");
sb.AppendLine(location.Heading.ToString());
label1.Text = sb.ToString();
}
}
为了异步获取位置,如下一个示例代码所示,你必须注册LocationChanged事件。在这个示例中GPS对象的初始化被省略了,因为它和第一个代码示例是一样的方式。无论应用程序有没有注册LocationChanged事件,用户都可以选择Location Updates菜单(参看GPS Lookup屏幕)。当应用程序注册了这个事件时,在gps_LocationChanged事件处理程序中就会接收到持续更新的位置信息。与同步方式取得的位置信息相同,这个信息在GpsPosition对象中也是可用的。然而,异步更新是在不同的线程中获取的,甚至对GPSID用户来说是透明的。因为除了用户界面控件的创建者进程之外其他进程都不允许更新用户界面,所以要更新用户界面还必须做一些其他的工作。就像你在下面代码中gps_LocationChanged处理程序中看到的一样,控件必须通过Control.Invoke方法来更新。
更多精彩
赞助商链接