0

ScheduledTaskAgent プロジェクトがあり、ScheduledAgent.cs の oninvoke() メソッドは、カスタム定義のクラス ライブラリ プロジェクトの fetchcurrentdetails() メソッドを呼び出します。

この public string fetchcurrentdetails() メソッドには、次の一連のイベントがあります。

            //class variables
            string strAddress = string.empty;
             public string fetchcurrentdetails()
              {
                GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
                if (watcher.Permission == GeoPositionPermission.Granted)
                 {
                  watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);    
                 }
                 return strAddress ;
              }

           private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
             {
            WebClient bWC = new WebClient();                
            System.Uri buri = new Uri("http://dev.virtual//...");
            bWC.DownloadStringAsync(new Uri(buri.ToString()));
            bWC.DownloadStringCompleted += new                    DownloadStringCompletedEventHandler(bHttpsCompleted);
           }


          private void bHttpsCompleted(object sender, DownloadStringCompletedEventArgs bResponse)
              {
             //do some data extraction and return the string
             strAddress = "This is extracted data";
             }

メソッド/イベント bHttpsCompleted() が完了するまで実行がクラス ライブラリに保持されるようにする方法はありますか? または、イベント/メソッド bHttpsCompleted() が発生したときに値を返す方法は何ですか。

4

2 に答える 2

2

このように変更できます

public Task<string> fetchcurrentdetails()
    {

        var tcs = new TaskCompletionSource<string>();

        GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
        if (watcher.Permission == GeoPositionPermission.Granted)
        {
            watcher.PositionChanged += (s, e) =>
                {
                    WebClient bWC = new WebClient();
                    System.Uri buri = new Uri("http://dev.virtual//...");
                    bWC.DownloadStringAsync(new Uri(buri.ToString()));
                    bWC.DownloadStringCompleted += (s1, e1) =>
                    {

                        if (e1.Error != null) tcs.TrySetException(e1.Error);
                        else if (e1.Cancelled) tcs.TrySetCanceled();
                        else
                            tcs.TrySetResult(e1.Result);
                        //do some data extraction and return the string                          
                    };
                };
        }
        return tcs.Task;
    }

電話 :await fetchcurrentdetails()

于 2012-12-07T13:22:26.050 に答える
-1

bHttpsCompleted 関数から戻る必要があります。

于 2012-12-05T13:38:28.927 に答える