2015-05-17 2 views
0

У меня есть приложение, которое делает много звонков, какПреобразование стандартного приложения для WP8 с WebClient

string html = getStringFromWeb(url); 
//rest of processes use the html string 

Я пытаюсь получить приложение для Windows Phone, и методология, кажется, в корне отличается:

void perform asynch call (...) 

void handler 
{ string html = e.Result 
    //do things with it 
} 
  1. получает HTML с веб-страницы возможно только с помощью этого метода асинхронная?
  2. Как переделать код, чтобы я мог работать с html, когда я его вызываю?
+1

Вы пробовали работать с асинхронным API? По крайней мере, отправьте вызов метода 'getStringFromWeb'. –

+1

Используя HttpClient и ключевые слова async/await, вы можете написать асинхронный код, похожий на то, что вы будете писать синхронный код. Это сэкономит вам много времени, чтобы преобразовать ваш код. –

+0

Спасибо за ключевые слова KooKiz, это решение, которое я ищу. – donkz

ответ

1

Асинхронные методы возвращают Task. Если вы не используете Wait(), код продолжает выполнение после асинхронного метода. Если вы не хотите использовать Wait(), вы можете создать асинхронный метод с параметром Callback -method.

С Wait():

// Asynchronous download method that gets a String 
public async Task<string> DownloadString(Uri uri) { 
    var task = new TaskCompletionSource<string>(); 

    try { 
     var client = new WebClient(); 
     client.DownloadStringCompleted += (s, e) => { 
     task.SetResult(e.Result); 
    }; 

    client.DownloadStringAsync(uri); 
    } catch (Exception ex) { 
     task.SetException(ex); 
    } 

    return await task.Task; 
} 

private void TestMethod() { 
    // Start a new download task asynchronously 
    var task = DownloadString(new Uri("http://mywebsite.com")); 

    // Wait for the result 
    task.Wait(); 

    // Read the result 
    String resultString = task.Result; 
} 

Или с Callback:

private void TestMethodCallback() { 

    // Start a new download task asynchronously 
    DownloadString(new Uri("http://mywebsite.com"), (resultString) => { 
     // This code inside will be run after asynchronous downloading 
     MessageBox.Show(resultString); 
    }); 

    // The code will continue to run here 
} 

// Downlaod example with Callback-method 
public async void DownloadString(Uri uri, Action<String> callback) { 

    var client = new WebClient(); 
    client.DownloadStringCompleted += (s, e) => { 
     callback(e.Result); 
    }; 

    client.DownloadStringAsync(uri); 
} 

Конечно, я рекомендую использовать обратный вызов так, как он не блокирует код из пока он загружает String.

+0

Спасибо! Я попробую это как можно скорее. – donkz

1

Всякий раз, когда вы работаете над веб-запросами, отправляйтесь на HttpWebRequest.

В Windows Phone 8 xaml/runtime вы можете сделать это с помощью HttpWebRequest или WebClient.

В основном WebClient является wraper вокруг HttpWebRequest.

Если у вас есть небольшой запрос сделать, то пользователь HttpWebRequest. Это выглядит следующим образом:

HttpWebRequest request = HttpWebRequest.Create(requestURI) as HttpWebRequest; 
WebResponse response = await request.GetResponseAsync(); 
ObservableCollection<string> statusCollection = new ObservableCollection<string>(); 
using (var reader = new StreamReader(response.GetResponseStream())) 
{ 
    string responseContent = reader.ReadToEnd(); 
    // Do anything with you content. Convert it to xml, json or anything. 
} 

Вы можете сделать это в функции, которая в основном представляет собой метод асинхронного использования.

Приходя к 1-му вопросу, все веб-запросы будут выполняться как вызовы асинхронной связи, так как требуется время для загрузки на основе вашей сети. Чтобы приложение не замерзало, будет использован метод асинхронного использования.

+0

Thx для ответа, но вы в основном предоставляете неполный код и говорите, чтобы придерживаться метода асинхронного анализа для парня, который спрашивает о природе методов асинхронной работы. Не совсем полезно. – donkz

+1

@donkz Вы получили ответ в любом случае. Мне не нужно сейчас редактировать. – Mani

Смежные вопросы