<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      在 Silverlight 5 項目中使用 async/await

      .Net 4.5 提供了 async/await 讓異步編程回歸同步, 不過, async/await 不是只能在 .Net 4.5 下才能使用, 通過使用 Async Targeting Pack 就可以在 .Net 4.0 以及 Silverlight 5 項目中使用 async/await。

      先來看一段 Silverlight 代碼, 不使用 async/await 時是這樣子的:

      private void DistanceTestButtonClick(object sender, RoutedEventArgs routedEventArgs) {
         // 假設這是用戶輸入的坐標
         var point1 = GeometryUtil.CreateMapPointWgs84(113.3, 23.07);
         // 假設用戶輸入目的地坐標
         var point2 = GeometryUtil.CreateMapPointWgs84(110.3, 20);
         // 全局地圖控件
         var map = App.ObjContainer.Resolve(typeof(Map));
         // 從當前 UI 上下文創建 TaskScheduler
         var uiContext = TaskScheduler.FromCurrentSynchronizationContext();
         // 創建三個幾何服務
         var geoSvc1 = GeoFactory.CreateGeometryService();
         var geoSvc2 = GeoFactory.CreateGeometryService();
         var geoSvc3 = GeoFactory.CreateGeometryService();
         // 將用戶輸入的坐標投影為地圖的坐標系坐標
         var task1 = geoSvc1.ProjectPointAsync(point1, map.SpatialReference);
         task1.ContinueWith(t1 => {
            point1 = task1.Result;
            // 目的地坐標投影為地圖坐標
            var task2 = geoSvc2.ProjectPointAsync(point2, map.SpatialReference);
            task2.ContinueWith(t2 => {
               point2 = task2.Result;
               var buffParam = this.CreateBufferParameters(point2);
               var buffTask = geoSvc3.BufferTaskAsync(buffParam);
               // 做一次緩沖查詢
               buffTask.ContinueWith(t3 => {
                  var buffGeometry = buffTask.Result.First();
                  var disParam = new DistanceParameters {
                     DistanceUnit = LinearUnit.Meter,
                     Geodesic = true
                  };
                  // 求距離
                  var disTask1 = geoSvc1.DistanceTaskAsync(point1, point2, disParam);
                  disTask1.ContinueWith(t4 => {
                     var disTask2 = geoSvc2.DistanceTaskAsync(point1, buffGeometry.Geometry, disParam);
                     disTask2.ContinueWith(t5 => {
                        //最后求得最終距離
                        var dis1 = disTask1.Result;
                        var dis2 = disTask2.Result;
                     }, uiContext);
                  }, uiContext);
               }, uiContext);
            }, uiContext);
         }, uiContext);
      }
      

      看上面的代碼, 做 Silverlight 開發的可真傷不起啊, Silverlight 閹割了所有的同步方法, 只能做異步查詢, 本來是可以放在后臺線程中模擬同步的,可偏偏 ArcGIS 提供的 Silverlight API 在回調函數中創建了 UI 元素以及 DepedencyObject , 想放到后臺線程中計算也不行, 真是悲劇。

      下面就請出 Async Targeting Pack 來拯救一下吧, 打開 NuGet 管理器, 輸入 await 查詢, 找到 Async Targeting Pack for Visual Studio 11 , 然后下載并添加引用到 Silverlight 項目, 開始用 async/await 改造上面的代碼, 最終的結果如下, 看看是不是清爽了好多呢?

      async private void DistanceTestButtonClick(object sender, RoutedEventArgs routedEventArgs) {
      	var point1 = GeometryUtil.CreateMapPointWgs84(113.3, 23.07);
      	var point2 = GeometryUtil.CreateMapPointWgs84(110.3, 20);
      
      	var map = App.ObjContainer.Resolve(typeof(Map));
      
      	var geoSvc1 = GeoFactory.CreateGeometryService();
      	var geoSvc2 = GeoFactory.CreateGeometryService();
      	var geoSvc3 = GeoFactory.CreateGeometryService();
      
      	point1 = await geoSvc1.ProjectGeometryAsync(point1, map.SpatialReference) as MapPoint;
      	point2 = await geoSvc2.ProjectGeometryAsync(point2, map.SpatialReference) as MapPoint;
      
      	var buffParam = this.CreateBufferParameters(point2);
      	var buffGeometry = (await geoSvc3.BufferTaskAsync(buffParam)).First();
      
      	var disParam = new DistanceParameters {
      		DistanceUnit = LinearUnit.Meter,
      		Geodesic = true
      	};
      
      	var dist1 = await geoSvc1.DistanceTaskAsync(point1, point2, disParam);
      	var dist2 = await geoSvc2.DistanceTaskAsync(point1, buffGeometry.Geometry, disParam);
      
      	var d = dist2 - dist1;
      }
      

      這樣編譯出來的 xap 包只是多了一個 dll, 依然可以在 Silverlight5 下運行, 客戶端不需要安裝任何軟件。

      大家趕快升級 VS2012 吧, 異步編程回歸同步了!

      posted @ 2012-07-21 19:01  張志敏  閱讀(4024)  評論(12)    收藏  舉報
      主站蜘蛛池模板: 四虎影视4hu4虎成人| 亚洲欧洲日韩国内高清| 毛片网站在线观看| 亚洲日韩AV秘 无码一区二区| 国产福利社区一区二区| 蜜桃成熟色综合久久av| 亚洲欧美日韩精品成人| 久久精产国品一二三产品| 护士张开腿被奷日出白浆| 亚洲国产良家在线观看| 亚洲一区二区三区在线激情| 婷婷综合缴情亚洲| 精品自拍偷拍一区二区三区| 亚洲爆乳WWW无码专区| 国产成人免费午夜在线观看| 国产又色又爽又黄的网站免费| 丝袜美腿诱惑之亚洲综合网| 一二三四中文字幕日韩乱码| 亚洲精品国产av成人网| 福利一区二区在线播放| 新龙县| 日本一卡2卡3卡四卡精品网站| 四虎成人精品永久网站| 麻豆国产传媒精品视频| 色婷婷五月综合久久| 日韩亚洲欧美中文高清| 永久免费无码av在线网站| 四虎国产精品久久免费精品 | 天堂网在线.www天堂在线资源| 熟妇人妻无码中文字幕老熟妇| 高级艳妇交换俱乐部小说| 一本色道久久综合亚洲精品不卡| av无码精品一区二区乱子| 欧美xxxx做受欧美| 亚洲国产成人自拍视频网| 若羌县| 日日噜噜夜夜狠狠久久蜜桃| 国产亚洲精品久久久久秋霞| 中文字幕在线精品国产| 秋霞av鲁丝片一区二区| 亚洲av伊人久久综合性色|