C# 战胜异步泥潭

C# 战胜异步泥潭,c#,asynchronous,C#,Asynchronous,我正在尝试执行RouteQuery,但它只允许异步调用。不幸的是,当返回被命中时,它还没有完成QueryAsync() 有没有一个标准的方法来解决这个问题 通常我只会启动一个定时器,等待一个属性填充,但这是通往贫民窟的路。必须有一个解决办法 private bool wayPointHit(GeoCoordinate geo) { RouteQuery query = new RouteQuery(); List<GeoCoordinate> coords = new

我正在尝试执行RouteQuery,但它只允许异步调用。不幸的是,当返回被命中时,它还没有完成QueryAsync()

有没有一个标准的方法来解决这个问题

通常我只会启动一个定时器,等待一个属性填充,但这是通往贫民窟的路。必须有一个解决办法

private bool wayPointHit(GeoCoordinate geo)
{
    RouteQuery query = new RouteQuery();
    List<GeoCoordinate> coords = new List<GeoCoordinate>();
    coords.Add(new GeoCoordinate(curLocation.Latitude, curLocation.Longitude));
    coords.Add(geo);

    query.Waypoints = coords;
    bool hit = false;

    query.QueryCompleted +=  (sender, args)  =>
    {
        var rt = args.Result;
        if (rt.LengthInMeters <= 20)
        {
            hit = true;

        }
    };
    query.QueryAsync();

    return hit;
}
专用布尔航路点命中(地理坐标)
{
RouteQuery=新建RouteQuery();
列表坐标=新列表();
添加(新地理坐标(curLocation.lation,curLocation.Longitude));
添加(地理位置);
query.Waypoints=坐标;
bool-hit=false;
query.QueryCompleted+=(发件人,参数)=>
{
var rt=args.Result;

如果(rt.LengthInMeters),异步的整个思想不是等待操作完成(即同步)但要启动查询,并返回到其他内容。查询结果应通过回调代码处理。@MarcinJuraszek如果我可以同步,请相信我,我会的。但是Windows Phone一直都是异步的。是的,因为同步会使UI冻结,所以不建议这样做。如果平台是异步的,您必须进行编程也以异步方式。不要试图使代码像同步一样,因为系统不允许这样。好吧,我明白你的意思,这很好。但你并没有真正提供解决这个问题的方法。我知道我需要坚持异步解决方案。我有。这就是为什么我有这个问题。我不会给你解决方案,bec因为这里可能没有解决方案。这可能是一个问题,您可能试图修复错误的问题(可能您需要更改设计,而不是方法)。顺便问一句,是WP8还是WP7.5?