我有一个使用GeoLocator查找用户位置的应用。 它看起来像这样:
public async (not sure what to put here) Cordinates()
{
if (_geolocator == null)
{
_geolocator = new Geolocator();
}
Geoposition _Position = await locator.GetGeopositionAsync();
}
我还有一个字符串属性,我想用它来描述过程。
public string Status {get; set}
例如,当Cordinates()
开始时,字符串值应为"正在搜索..."当Cordinates()
完成后,它可以说"完成"
我认为这是我应该使用await / async的情况,但我可以使用一些帮助来解决它。
答案 0 :(得分:3)
如果您返回某些内容,则应将返回类型设置为Task<T>
;如果不返回任何内容,则应将Task
设置为void
。例如,如果您有return _position;
之类的行,那么您应该将函数的返回类型设为Task<Geoposition>
,或者如果您有return 0
,则应将其更改为Task<int>
,如果你只是不返回任何内容,或只是return
只使用Task
。
public async Task<your return type> or Task if return type is void Cordinates()
{
if (_geolocator == null)
{
_geolocator = new Geolocator();
}
this.Status = "Searching..."; // seting status and awaiting your async GetGeoposition
Geoposition _Position = await locator.GetGeopositionAsync();
this.Status = "Done"; // after GetGeoposition is finidshed you are here and setting status to done
}
答案 1 :(得分:1)
我认为你应该在使用之前阅读async / await和threading的基础知识。 一个好的开始可能是Stephen's post here。
要修复您的代码,它将是这样的(另请参阅MSDN以供参考):
public async Task<Geoposition> Cordinates()
{
if (_geolocator == null)
{
_geolocator = new Geolocator();
}
Geoposition _Position = await locator.GetGeopositionAsync();
}
在Status
中,您将检查当前位置是否已被查询过。根据它,返回您选择的字符串值。那里没有异步操作。或者,在等待地理定位的前后设置雕像。