应用程序调用了一个为窗口 8 中的不同线程编组的接口 [英] The application called an interface that was marshalled for a different thread in window 8
本文介绍了应用程序调用了一个为窗口 8 中的不同线程编组的接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在项目中,我使用 HttpWebRequest 来下载 Feed:
In project i use HttpWebRequest to to download Feeds :
HttpWebRequest request;
public void getFeeds()
{
request = (HttpWebRequest)WebRequest.Create("http://vnexpress.net/rss/gl/trang-chu.rss");
request.BeginGetResponse(ResponseCallBack, request);
}
SampleDataGroup group1;
private void ResponseCallBack(IAsyncResult result)
{
var request = (HttpWebRequest)result.AsyncState;
var response = request.EndGetResponse(result) as HttpWebResponse;
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
var stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream))
{
string strReaderReader = reader.ReadToEnd();
XDocument doc = XDocument.Parse(strReaderReader);
var element = doc.Root.Element("channel").Elements("item");
group1 = new SampleDataGroup("Group-1",
"Hot News",
"Group Subtitle: 1",
"Assets/DarkGray.png",
"");
foreach (XElement x in element)
{
group1.Items.Add(new SampleDataItem("", x.Element("title").Value, "", "", "", "", group1));
}
request.Abort();
request = null;
_allGroups.Add(group1);
onComplete1();
}
}
}
onComplete1() 是委托,我用来在解析 XML 完成时更新布局.但它出错了:
onComplete1() is delegate , i use to update layout when pares XMl complete. But it erros :
System.Exception: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
请帮帮我!
推荐答案
很可能,您的 onComplete1()
方法会执行一些 UI 访问.
Most likely, your onComplete1()
method does some UI access.
尝试将其包含在 Dispatcher.RunAsync 方法:
Try to enclose it in a Dispatcher.RunAsync method:
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
onComplete1();
});
或将其作为任务等待,具体取决于您的需要:
or await it as a Task, depending on your needs:
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
onComplete1();
}).AsTask().Wait();
这篇关于应用程序调用了一个为窗口 8 中的不同线程编组的接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文