locked
сохранить html в string RRS feed

  • Вопрос

  • Здравствуйте!
    при сохранении возникает проблема...
    имеется следующий код:

    public MainPage() { InitializeComponent(); LoadHtml(site); OtherFunc(); }

     public void LoadHtml(string page)
            {
                var client = new WebClient();
                client.DownloadStringCompleted += ClientDownloadStringCompleted;
                client.DownloadStringAsync(new Uri(page));
            }
            void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                if (e.Error == null && !e.Cancelled)
                {
                    // обработка полученных данных 
                    ParseRss(e.Result);
                }
            }

            private void ParseRss(string rss)
            {
               string HtmlPage = rss;
            }

    Проблема в следующем:вызывается функция LoadHtml,Следом-OtherFunc и в этой функции я работаю c HtmlPage,но первая функция не успевает сохранить страницу в string и выскакивает ошибка.Как можно обойти это?(P.S. пишу библиотеку,поэтому в ParseRss не могу выполнять функции которые содержаться в OtherFunc)

    Подскажите другой вариант пожалуйста...

    5 декабря 2013 г. 18:24

Ответы

  • Вместо MessageBox.Show(htmldoc); Напишы root(htmldoc); ну и вызывайте их в onnavigatedto а не после инициализации
    7 декабря 2013 г. 7:39
  • Привет!

    Можно вот так:

    public void DownloadHtml()
    {
        var client = new WebClient();
        client.OpenReadCompleted += client_OpenReadCompleted;
        string uri = "http://google.com/";
        client.OpenReadAsync(new Uri(uri));
    }
    
    private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        try
        {
            StreamReader reader = new StreamReader(e.Result);
            string str = reader.ReadToEnd();
    	MessageBox.Show(str);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    6 декабря 2013 г. 17:28

Все ответы

  • 5 декабря 2013 г. 19:39
  • не помогло...


     static async void SavePage(string file, string a)
            {
                HttpWebRequest request = HttpWebRequest.CreateHttp(file);
                HttpWebResponse webResponse = await request.GetResponseAsync() as HttpWebResponse;
                Stream responseStream = webResponse.GetResponseStream();
    
                using (StreamReader reader = new StreamReader(responseStream))
                {
                    HtmlPage = await reader.ReadToEndAsync();
                }
                
            }
    продебажил функцию...

    когда запускаю проект вызывается функция SavePage,доходит до HttpWebRequest,далее происходит инициализация и появляется мое окно,и только потом возвращается к HttpWebResponce и т.д.

    В HtmlPage сохраняется страница,но все равно таже ошибка если есть за этой функцией еще одна

    6 декабря 2013 г. 5:16
  •  private void ParseRss(string rss)
            {
               string HtmlPage = rss; // <<<< вы же его в методе используете, и этот HtmlPage доступен только здесь. внутри метода, сделайте его свойством
            }


    6 декабря 2013 г. 17:21
  • Все равно не помогло..

    public partial class MainPage : PhoneApplicationPage
        {
            // Constructor
            public static string HtmlDoc;
            public MainPage()
            {
                InitializeComponent();
                DownloadHtml();
                Root(HtmlDoc);        
            }
            public void DownloadHtml()
            {
                var client = new WebClient();
                client.OpenReadCompleted += client_OpenReadCompleted;
                string uri = "http://www.google.com";
                client.OpenReadAsync(new Uri(uri));
            }
            private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                try
                {
                    StreamReader reader = new StreamReader(e.Result);
                    HtmlDoc = reader.ReadToEnd();
                    MessageBox.Show(HtmlDoc);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    
            public void Root(string y)
            {
                MessageBox.Show(y);
            }
        }

    Вызывается Функция DownloadHtml и телефон не ждет завершения выполнения функции и вызывает Root

    • Изменено xero-rock 7 декабря 2013 г. 6:16
    7 декабря 2013 г. 6:14