Странная проблема Silverlight - PullRequest
       5

Странная проблема Silverlight

0 голосов
/ 28 сентября 2010

У меня есть метод, который генерирует XML для созданного мною класса -getXML ().Это вызывается из следующих методов:

private void send_Response()
    {
        String xmlUrl = ((App)Application.Current).Resources["xmlUrl"].ToString();
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(xmlUrl,              UriKind.Absolute));
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
    }

    void RequestReady(IAsyncResult asyncResult)
    {
        HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
        Stream stream = request.EndGetRequestStream(asyncResult);
        StreamWriter writer = new StreamWriter(stream);
        writer.WriteLine("assessmentXml=" + assessment.getXML(testComplete));
        writer.Flush();
        writer.Close();

        request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
    }

    void ResponseReady(IAsyncResult asyncResult)
    {
        HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

        Stream s = response.GetResponseStream();
        StreamReader sr = new StreamReader(s);

        String line = "";
        String Result = "";

        line = sr.ReadLine();
        while (line != null)
        {
            Result += line;
            line = sr.ReadLine();
        }

        s.Close();
    }

Сам getXML выглядит следующим образом:

public String getXML(bool end)
    {
        StringWriter output = new StringWriterWithEncoding(Encoding.UTF8);
        XmlWriterSettings ws = new XmlWriterSettings();
        ws.Indent = true;
        ws.Encoding = new UTF8Encoding(true);
        ws.ConformanceLevel = ConformanceLevel.Document;

        using (XmlWriter writer = XmlWriter.Create(output, ws))
        {
            writer.WriteStartElement("root");

            if (end)
            {
                writer.WriteAttributeString("testComplete", "true");
            }
            else
            {
                writer.WriteAttributeString("testComplete", "false");
            }

            for (int i = 0; i < theSections.Count(); i++)
            {
                writer.WriteStartElement("section");
                writer.WriteAttributeString("id", theSections.ElementAt(i).Id.ToString());
                writer.WriteAttributeString("title", theSections.ElementAt(i).Name.ToString());
                writer.WriteAttributeString("completed", theSections.ElementAt(i).Completed.ToString());

                for (int j = 0; j < theSections.ElementAt(i).Elements.Count(); j++)
                {
                    writer.WriteStartElement(theSections.ElementAt(i).Elements.ElementAt(j).Name.ToString());

                    for (int a = 0; a < theSections.ElementAt(i).Elements.ElementAt(j).Attributes().Count(); a++)
                    {
                        writer.WriteAttributeString(theSections.ElementAt(i).Elements.ElementAt(j).Attributes().ElementAt(a).Name.ToString(), theSections.ElementAt(i).Elements.ElementAt(j).Attributes().ElementAt(a).Value);
                    }

                    for (int c = 0; c < theSections.ElementAt(i).Elements.ElementAt(j).Elements().Count(); c++)
                    {
                        writer.WriteStartElement(theSections.ElementAt(i).Elements.ElementAt(j).Elements().ElementAt(c).Name.ToString());
                        writer.WriteString(theSections.ElementAt(i).Elements.ElementAt(j).Elements().ElementAt(c).Value);
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }

            writer.WriteEndDocument();
            writer.Flush();
            writer.Close();

        }
        return output.ToString();
    }

(извините за избыточные количества кода).

Thisвсе работает нормально, и я вижу вывод XML.Но теперь я хочу добавить еще немного кода в функцию getXML (), и Silverlight просто не позволит мне это сделать.Даже простой MessageBox.Show («что-то») не будет отображаться, и весь метод теперь не может генерировать какой-либо XML.Сказав это, в Visual Studio нет ошибок или предупреждений.

Я добавил новый код в другие области того же файла .cs, и все работает нормально, только в этом одном методе.Я пробовал перестраивать, но тоже безрезультатно, поэтому я не понимаю, как это могло быть.Это ошибка Visual Studio?

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 28 сентября 2010

У меня это работает. Нет идей почему. Я думаю, что ошибка Cross Thread была связана с тем, что messageBox был частью пользовательского интерфейса, поэтому я удалил это и просто добавил некоторые новые вещи xmlwriter ... Я пробовал это раньше, и это не сработало, поэтому я буду следить за этим, но пока все хорошо. Все еще озадачен, но не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...