Windows phone 7 位置感知代码从C#转换为F#?

Windows phone 7 位置感知代码从C#转换为F#?,windows-phone-7,f#,location,c#-to-f#,Windows Phone 7,F#,Location,C# To F#,我在WP7应用程序中有下面的代码,我开始研究F#。。我找不到任何地理坐标的例子,有人能告诉我这段代码在F#中是什么样子的吗?或者给我举个例子?我已经看过一些教程、书籍和Pluralsight,所以我认为我刚刚开始掌握基本知识……但我似乎无法理解这一点!我能找到的所有例子都是基于数学问题空间的。非常感谢您的任何帮助或建议 public部分类主页:PhoneApplicationPage { 地球坐标观测员; //建造师 公共主页() { 初始化组件(); SupportedOrientations

我在WP7应用程序中有下面的代码,我开始研究F#。。我找不到任何地理坐标的例子,有人能告诉我这段代码在F#中是什么样子的吗?或者给我举个例子?我已经看过一些教程、书籍和Pluralsight,所以我认为我刚刚开始掌握基本知识……但我似乎无法理解这一点!我能找到的所有例子都是基于数学问题空间的。非常感谢您的任何帮助或建议

public部分类主页:PhoneApplicationPage
{
地球坐标观测员;
//建造师
公共主页()
{
初始化组件();
SupportedOrientations=SupportedPageOrientation.纵向| SupportedPageOrientation.横向;
}
私有void btnStart\u单击(对象发送方,路由目标)
{
//重新初始化地理坐标记录器
watcher=新的地理坐标记录器(地理位置精度高);
watcher.MovementThreshold=100;//以米为单位的距离
//为StatusChanged和PositionChanged事件添加事件处理程序
watcher.StatusChanged+=新事件处理程序(watcher\u StatusChanged);
watcher.PositionChanged+=新事件处理程序(watcher\u PositionChanged);
//开始数据采集
watcher.Start();
//隐藏按钮
btnStart.Visibility=可见性。已折叠;
}
#区域事件处理程序
/// 
///StatusChanged事件的处理程序。这将在UI线程上调用MyStatusChanged
///并通过地理位置StatusChangedEventArgs
/// 
/// 
/// 
void watcher_status已更改(对象发送器、地理位置StatusChangedEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>MyStatusChanged(e));
}
/// 
///PositionChanged事件的处理程序。这将在UI线程和
///传递地理位置StatusChangedEventArgs
/// 
/// 
/// 
void watcher_位置已更改(对象发送器,地理位置更改Deventargs e)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>MyPositionChanged(e));
}
#端区
/// 
///从PositionChanged事件处理程序调用的自定义方法
/// 
/// 
/// 
void MyPositionChanged(地理位置ChangedEventArgs e)
{
//更新地图以显示当前位置
地理坐标geo=新的地理坐标(e.Position.Location.lation,e.Position.Location.Longitude);
位置ppLoc=新位置(e.Position.Location.Latitude,e.Position.Location.经度);
mapMain.SetView(地理位置,10);
//更新图钉位置并显示
MapLayer.SetPosition(ppLocation,ppLoc);
ppLocation.Visibility=System.Windows.Visibility.Visible;
}
/// 
///从StatusChanged事件处理程序调用的自定义方法
/// 
/// 
/// 
void MyStatusChanged(地理位置StatusChangedEventArgs e)
{
开关(如状态)
{
案例地理位置状态。已禁用:
//位置服务已禁用或不受支持,请提醒用户
tbStatus.Text=“很抱歉,我们在此设备上找不到您”;
打破
案例地理位置状态。正在初始化:
//位置服务正在初始化
//禁用“开始位置”按钮
tbStatus.Text=“正在寻找您…”;
打破
案例地理位置status.NoData:
//位置服务正在工作,但未找到数据,请提醒用户并启用“停止位置”按钮
tbStatus.Text=“还找不到您…”;
ResetMap();
打破
案例地理位置状态。准备就绪:
//位置服务正在接收数据,显示当前位置并启用停止位置按钮
tbStatus.Text=“我们找到你了!”;
打破
}
}
void ResetMap()
{
位置ppLoc=新位置(0,0);
地理坐标goe=新的地理坐标(0.0,0.0);
mapMain.SetView(goe,1);
//更新图钉位置并显示
MapLayer.SetPosition(ppLocation,ppLoc);
ppLocation.Visibility=System.Windows.Visibility.Collapsed;
}
}

我认为这是因为F#被吹捧为一种可以处理大量信息而不会过于冗长的语言。虽然您可以通过调用相关库来使用F#构建小型用户界面元素,但其目的是使用C#/ASP.NET/等来构建UI。因此,这对您的应用程序来说毫无意义,因为您所做的只是构建一个小型UI,并将该UI的事件连接到一个更大的地理处理功能库

但是如果你想从附近所有感兴趣的图书馆(或类似的图书馆)收集信息,然后根据与用户的距离和用户“喜欢”该兴趣点的可能性对其进行排序,基于某种算法,该算法旨在将随机兴趣点与类别或之前的评级进行比较,那么F#将是一个不错的选择。您可以快速描述这些数据结构,操作它们,并将处理结果返回到用户界面


这就是为什么说明会有帮助。虽然很容易调用或创建用户界面(C代码只显示F代码传递的一些文本),但它可以用于为您的手机应用程序创建后端。

您发布的示例包含大量代码,因此我不希望有人会为您将其转换为F代码。从F#调用.NET功能通常与从C#调用.NET功能非常相似(至少在开始学习如何使用一些高级F#模式之前),因此翻译应该非常直接

初始化
geocordinatewatcher
的F#版本代码可能如下所示:

let watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
watcher.MovementThreshold <- 100

// Add event handlers for StatusChanged and PositionChanged Events 
watcher.StatusChanged.Add(fun eargs ->
  MyStatusChanged(eargs) )
watcher.PositionChanged.Add(fun eargs ->
  MyPositionChanged(eargs) ) 

// Start data acquisition 
watcher.Start()