c#从Invoke,Delegate返回一个字符串

时间:2017-04-22 12:44:13

标签: c# richtextbox html-agility-pack

我为一个带有HTML文本的RichTextBox(使用HtmlAgilityPack解析)编写了一个跨线程更新的扩展。现在我也需要纯文本,从HTML标签中剥离,这是精确的innerText返回。

但是如何从代表那里回来?

 public static string AppendHTMLText(this RichTextBoxEx box, string html)
    {
        // cross thread allowed
        if (box.InvokeRequired)
        {

            box.Invoke((MethodInvoker)delegate()
            {
                return AppendHTMLText(box, html); // ???
            });
        }
        else
        {

            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

            //document.OptionFixNestedTags = false;
            //document.OptionCheckSyntax = false;
            //document.OptionWriteEmptyNodes = true;

            document.LoadHtml(html);

            HtmlAgilityPack.HtmlNode doc = document.DocumentNode.SelectSingleNode("/");
            HtmlAgilityPack.HtmlNodeCollection nodes = doc.ChildNodes;

            parseHTML(doc.ChildNodes, box);

            return doc.InnerText;
        }

    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

我会按以下方式进行:

public static void AppendHTMLText(this RichTextBoxEx box, string html)
{
    // use HtmlAgilityPack here
    // ...
    string text = doc.InnerText;

    if (box.InvokeRequired)
    {
        box.Invoke((MethodInvoker)delegate()
        {
            box.AppendText(text);
        });
    }
    else
    {
        box.AppendText(text);
    }
}