0

「無効なクロススレッドアクセス」をスローするように見える次のコードがあります。理由がわからないようです。URLからリモートxmlファイルをロードしていますが、そのXMLを解析すると、常にこのエラーが発生します。助言がありますか?

using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            string xml = streamReader.ReadToEnd();

            using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
            {

                    reader.ReadToFollowing("channel");
                    reader.MoveToFirstAttribute();

                    reader.ReadToFollowing("title");
                    output.AppendLine("Title: " + reader.ReadElementContentAsString());

                    reader.ReadToFollowing("description");
                    output.AppendLine("Desc: " + reader.ReadElementContentAsString());

                    textBox1.Text = output.ToString(); //Invalid cross-thread access.
            }

        }

解析しようとしているXMLは次のようになります。c#を使用してさまざまなタイプのXMLを解析する方法を学び続けながら、断片を解析しようとしています。

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"xmlns:dc="http://purl.org   /dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0  /modules/slash/">
  <channel>
<title>Server &amp; Site News</title>
<description>A place for the Admin and Moderators to post the latest news on both the server and site.</description>
<pubDate>Fri, 18 May 2012 22:45:08 +0000</pubDate>
<lastBuildDate>Fri, 18 May 2012 22:45:08 +0000</lastBuildDate>
<generator>Forums</generator>
<link>http://removedurl.com/forums/server-site-news.23/</link>
<atom:link rel="self" type="application/rss+xml" href="http://removedurl.com/forums/server-site-news.23/index.rss"/>
<item>
  <title>Example Title</title>
  <pubDate>Mon, 14 May 2012 17:39:45 +0000</pubDate>
  <link>http://removedurl.com/threads/back-fully-working.11013/</link>
  <guid>http://removedurl.com/threadsback-fully-working.11013/</guid>
  <author>Admin</author>
  <dc:creator>Admin</dc:creator>
  <slash:comments>14</slash:comments>
</item>
</channel>
4

2 に答える 2

5

textBox1.Text = output.ToString(); //無効なクロススレッドアクセス。

これは、IOスレッドで操作を実行しているときにUIスレッドを呼び出しているためです。これらの操作を分離するかinvoke、UIスレッドを呼び出してみてください。

コードを次のように変更してみてください。

Dispatcher.BeginInvoke( () => { //your ui update code } );
于 2012-05-18T23:09:50.163 に答える
3

Mayankからもう少し詳細を追加するには:

Dispatcher.BeginInvoke( () => {
  textBox1.Text = output.ToString()
} );

UIオブジェクトへの呼び出しをUIスレッドにマーシャリングする必要があります。メインスレッド以外のスレッドのUI要素を変更することはできません。

于 2012-05-18T23:16:09.487 に答える