如何异步更改webBrowser内容?

时间:2013-12-04 22:56:43

标签: c# winforms asynchronous webbrowser-control

我正在做一个Rss Feed Reader程序,我想用html格式显示文章描述。我搜索一些文章和关于它的问题,我找到了extendedrichTextbox和类似的东西,但我不喜欢它们。(因为它太复杂,我只想显示价值)所以我决定在webbrowser中显示内容。我将所有文章描述html代码保存到单独的html文件中,然后当我想在webbrowser中显示内容时,我收到文件路径并将其设置为Webbrowser.Url

这是我的代码:

 var articles = user.RssFeeds.Where(r => r.Id == rssFeedId).Select(p =>     p.Articles).First();
 var filePath = (from a in articles
                where a.Title == articleName
                select a.FilePath).First();
webBrowser1.Url = new Uri(filePath);

我的问题是在设置Webbrowser.Url时它需要太多时间,而我的Window会冻结5-10秒。当它发生时我试试这个:

var task = Task.Factory.StartNew(() => webBrowser1.Url = new Uri(filePath));

但它不起作用,因为它仍然在同一个线程上工作,我尝试了其他愚蠢的方法,但它们也没有工作。当我点击树视图中的第一个文章节点,之后所有文章显示没有冻结时,会发生这个问题。 / p>

所以我等你的答案和建议。等我的英语不好。

1 个答案:

答案 0 :(得分:1)

设置WebBrowser.Url只会触发下载,通常您还需要处理DocumentComplete事件才能转到下一个网址。您可以使用异步循环执行此操作,例如DoWorkAsync from here