2014-02-12 2 views
0

Я хотел бы запустить задачу во время ожидания веб-запроса. Если задача заканчивается, прежде чем запрос может вернуть ответ, я бы вывел сообщение «Сервер занимает слишком много времени». Я использую объект WebClient, как я могу управлять тайм-аутом?WebClient TimeOut Windows Phone 8

public Class Result 
{ 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     if (NavigationContext.QueryString.TryGetValue("critere", out sCritere)) 
     { 
     try 
     { 
      _datamanager = new DataManager(); 
      _datamanager.m_evt_Client_DownloadStringCompleted += OnDownloadStringCompleted; 
      _datamanager.DownloadXmlData(DataManager.URL_RECHERCHE, sCritere); 

      //HERE I NEED TO RUN A TIMER If the response is too long i would display a message       

      } 
      catch(Exception ex) 
      { 
      MessageBox.Show(ex.Message, "Erreur", MessageBoxButton.OK); 
      NavigationService.GoBack(); 
      NavigationService.RemoveBackEntry(); 
      } 
     } 
    } 
    } 

public Class DataManager 
{ 
    public void DownloadXmlData(string uri, string critere = "") 
    { 
     try 
     { 
     WebClient client = new WebClient(); 
     client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); 
     client.Credentials = new NetworkCredential(UserSaved, PasswordSaved, domain); 
     client.DownloadStringAsync(new Uri(uri + critere)); 
     } 
     catch(WebException) 
     { 
      throw new WebException(MyExceptionsMessages.Webexception) ; 
     } 
     catch (Exception) 
     { 
      throw new UnknowException(MyExceptionsMessages.UnknownError); 
     } 
    } 

    public void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     //raise Downloadstringcompleted event if error==null 
    } 
} 

ответ

0

Вы можете использовать BackgroundWorker ..

BackgroundWorker bw = new BackgroundWorker(); 
bw.DoWork += (s, e) => 
{ 
    // your task to do while webclient is downloading 
}; 
bw.RunWorkerCompleted += (s, e) => 
{ 
    // check whether DownloadStringCompleted is fired or not 
    // if not, cancel the WebClient's asynchronous call and show your message. 
    client.CancelAsync(); 
    MessageBox.Show("message"); 
} 

client.DownloadStringAsync(uri); 
bw.RunWorkerAsync(); 
+0

я нашел, что это ... может быть, я должен использовать Task ... Выглядит проще и лучше ... [Task VS BGW] (HTTP: // blog.stephencleary.com/2013/09/taskrun-vs-backgroundworker-round-4.html) –