Основной вопрос Eventhandler - PullRequest
1 голос
/ 20 ноября 2010

Хорошо, сейчас у меня есть объект, содержащий 3 строки, а также сеттеры и геттеры.Теперь у меня есть два вопроса -

Во-первых, я новичок в C # Есть ли способ оптимизировать следующие методы и сделать их более эффективными?

    void getSearchResults(object sender, RoutedEventArgs e)
    {
        string baseURL = "http://api.search.live.net/xml.aspx?Appid=<MyAPPID>&query=%22";
        string companyName = ((TaxiCompany)sender).CoName;
        string formatAndKey = "%22&sources=web";
        WebClient c = new WebClient();
        c.DownloadStringAsync(new Uri(baseURL + companyName + formatAndKey));
        c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(findTotalResults);
    }


    //Parses search XML result to find number of results
    void findTotalResults(object sender, DownloadStringCompletedEventArgs e)
    {
        lock (this)
        {
            string s = e.Result;
            XmlReader reader = XmlReader.Create(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(s)));
            String results = "";
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name.Equals("web:Total"))
                    {
                        results = reader.ReadInnerXml();
                        break;
                    }

                }
            }
        }
    }

Во-вторых, я инициализируюобъект - новая компания такси (строковое имя, строковый телефон, строковые результаты).У меня есть имя и номер, и мне нужно вызвать две вышеупомянутые функции, чтобы получить noOfResults, чтобы я мог инициализировать объект.Тем не менее, я, кажется, столкнулся с кучей проблем с обработчиками событий.

Прежде всего, я был веб-разработчиком, поэтому, возможно, здесь есть что-то очень простое, что мне не хватает.У меня есть чувство, что настройка методов bing для возврата строки обратно в конструктор может быть проще всего, но не совсем уверен, как это сделать.

1 Ответ

1 голос
/ 20 ноября 2010

Прежде всего, вам не нужна блокировка на главной странице.Затем я бы сказал, что ваш блок XmlReader должен быть заменен вариантом LINQ-to-XML под названием XDocument , который позволит вам получить доступ к документу XML с помощью одной элегантной строки:

XDocument doc = XDocument.Parse(e.Result);

Получив документ, вы можете проверить, содержит ли он конкретный XNode .

...