0

Web サービスからデータを取得して Silverlight で使用するためのヘルパー クラスを作成しました。

   public static class RequestMethod
{
    public static string Get = "GET";
    public static string Post = "POST";


}
public static class RequestDataType
{
    public static string Xml = "Xml";
    public static string Json = "application/json";
}
public class HttpWebRequestHelper<T> 
{

    private readonly SynchronizationContext _context;


    private readonly ObservableCollection<T> _collection =
            new ObservableCollection<T>();
    public ObservableCollection<T> Collection
    {
        get { return _collection; }
    }

    public HttpWebRequestHelper()
    {
        _context = SynchronizationContext.Current;
    }

    public ObservableCollection<T> GetCollection ()
    {
        if (HttpWebRequest == null) throw new ArgumentNullException("request");
        HttpWebRequest.BeginGetResponse((result) =>
        {
            var response = HttpWebRequest.EndGetResponse(result);
            var stream = response.GetResponseStream();
            if (stream == null) return;
            var reader = new StreamReader(stream, Encoding.UTF8);
            var responseString = reader.ReadToEnd();
    var desirilizedObject = JsonConvert.DeserializeObject<IEnumerable<T>>(responseString);
            _context.Post((state) =>
                              {
                                  Collection.Clear();
                                  foreach (var item in desirilizedObject)
                                  {
                                      Collection.Add(item);
                                  }
                              }, null);
        }, null);
        return Collection;
    }

    private HttpWebRequest HttpWebRequest { get; set; }
    public void CreateRequest (string url,string requestMethod, string requestDataType)
  {

      var uri = new Uri(url, UriKind.Absolute);
        var request = (HttpWebRequest)WebRequest.Create(uri);
      request.Method = requestMethod;
      request.Accept = requestDataType;
      HttpWebRequest= request;
  }


}

これは私のクラスの使用例です:

  var request = new HttpWebRequestHelper<DriverModel>();
        request.CreateRequest("http://localhost:11624/api/Drivers/", RequestMethod.Get, RequestDataType.Json);
       request.GetCollection();
       this.DataContext = request;

HttpWebRequest が完了したら UI を更新したい。これどうやってするの ?

4

1 に答える 1

0

UI要素を変更するためにリクエストが実行されたときにエラーが発生したと思います。この場合、たとえば現在のスレッドに参加する必要があります。

Deployment.Current.Dispatcher.BeginInvoke(() => { this.Visibility = Visibility.Collapsed; });  
于 2012-11-05T12:39:08.543 に答える