【问题标题】:How can i change webBrowser content asynchronously?如何异步更改 webBrowser 内容?
【发布时间】:2013-12-04 22:56:42
【问题描述】:

我正在做一个 Rss Feed Reader 程序,我想以 html 格式显示文章描述。我搜索了一些文章和有关它的问题,我找到了扩展的richTextbox 和类似的东西,但我不喜欢它们。(因为它太复杂了,我只是想显示值)所以我决定在 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 时它需要太多时间,我的窗口冻结 5-10 秒。当它发生时我试试这个:

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

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

所以我等待你的回答和建议。抱歉我的英语不好。

【问题讨论】:

    标签: c# winforms asynchronous webbrowser-control


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但我使用 webBrowser.DocumentStream 解决了这个问题,但是如果我需要异步。再次工作,我会使用你的代码,无论如何谢谢你:)
    • @Selman22, webBrowser.DocumentStream 也是异步的,与webBrowser.DocumentText 相同。不能保证同步完成,即使有时会同步完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多