gpt4 book ai didi

c# - 在 WP7 中下载内容期间在 UI 中卡住

转载 作者:太空狗 更新时间:2023-10-29 23:10:22 25 4
gpt4 key购买 nike

我是 WP7 编码的新手。我正在寻找示例代码或指导以下任务:

我在远程服务器上有 3 个 html 页面,我想下载每个页面的内容并将其发布到 3 个不同的全景页面(显示为文本 block )。

我写了 3 套 webclient 来加载 html 页面;它可以显示为它应该在的位置。我面临的问题是,在下载时/下载期间,UI 线程“卡住”且无响应。

任何人都可以指导我/向我展示我可以将线程置于后台并在它完成后显示在 UI 中的示例代码吗?

这是我用来下载 HTML 页面的代码。

private async void GetNewsIndex(string theN)
{
string newsURI = newsURL + theN;
string fileName = theN + "-temp.html";
string folderName = "news";

prgBar01.Visibility = System.Windows.Visibility.Visible;

try
{
Task<string> contentDataDownloaded = new WebClient().DownloadStringTaskAsync(new Uri(newsURI));

string response = await contentDataDownloaded;

WriteTempFile(theN, response.ToString());

string contentData = ProcessDataToXMLNews(fileName, folderName);

WritenewsIndexXMLFile(newsIndexURI, folderName, contentData);

DisplayNewsIndex();

}
catch
{
//
}
}

我根据 Sinh Pham 的建议修改了上面的代码,它按预期完美运行。但是,因为我需要运行它的 3 个瞬间来同时从不同的来源下载页面;代码中断。有什么想法吗?

最佳答案

您确定 UI 在下载时卡住而不是在处理数据时卡住吗?从你的代码看来你只是在做

WriteTempFile(theN, response.ToString());

string contentData = ProcessDataToXMLNews(fileName, folderName);

WritenewsIndexXMLFile(newsIndexURI, folderName, contentData);

DisplayNewsIndex();

在 UI 线程上。尝试将它们包装在 BackgroundWorker 中。

编辑:像这样:

Edit2:由于您的 DisplayNewsIndex() 函数会导致 UI 发生变化,因此它必须在 UI 线程上执行。

var bw = new BackgroundWorker();
bw.DoWork += delegate {
WriteTempFile(theN, response.ToString());
string contentData = ProcessDataToXMLNews(fileName, folderName);
WritenewsIndexXMLFile(newsIndexURI, folderName, contentData);
Deployment.Current.Dispatcher.BeginInvoke(() => {
DisplayNewsIndex();
});
};
bw.RunWorkerAsync();

关于c# - 在 WP7 中下载内容期间在 UI 中卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7050779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com