繁体   English   中英

HTML解析-我应该使用哪种线程?

[英]HTML parsing-what kind of thread should i use?

我有一种方法可以解析为html文档,但是需要很长时间并且UI会冻结。 所以我想使用一个线程,但我很困惑。 有很多线程,例如后台工作者,调度程序等。我应该使用哪种类型? 另外,在我的方法中,我传递了一个参数。 如果使用线程,如何传递一个参数?

这是使用后台工作程序的示例代码:

// I usually disable controls (buttons, etc.)
// so user is prevented to perform other
// actions
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, e) =>
{
     // Get the parameter
     var param = e.Argument as <your expected object>
     // Perform parsing
}
worker.RunWorkerCompleted += (s1, e1) =>
{
     System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(
        new Action(() =>
        {
             // enable you controls here
        }));
}
worker.RunWorkerAsync(parameter);

希望这可以帮助!

自WPF以来,我不再使用背景工作人员。 我听说它是​​为WinForms创建的,应该在WPF中避免使用,但是我可能会误会。 由于您将字符串作为参数(而不是某些ui控件)传递,因此访问另一个线程像这样应该没有问题:

private void DoStuff(string documentName)
{
    Action a = () => 
    {
        var result = ParseFile(documentName);
        Action b = () => 
        {
            TextBox1.Text = result;
        };
        Dispatcher.BeginInvoke(b);
    };
    a.BeginInvoke(callback => 
    {
        a.EndInvoke(callback);
    }, null);
}

注意:不要将委托放在循环内,而应将循环放在委托内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM