跨线程rtf格式

时间:2017-04-21 13:20:24

标签: c# richtextbox

我使用此函数在交叉线程情况下更新RichTextBox

public void AddRtf(string text)
{
    // cross thread allowed
    if (rtb.InvokeRequired)
    {

        rtb.Invoke((MethodInvoker)delegate()
        {
            AddRtf(text);
        });
    }
    else
    {
        rtb.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}"; // this works
        rtb.Rtf = @"{\rtf1\ansi This "+text+"is in \b bold\b0.}"; // this not

    }

}

但是,无法正常工作,在传递"文本"时,我看不到RTF格式。参数。

会出现什么问题?

事实上,我需要一个简单的解决方案来更新RichTextBox,其中包含COLOR,BOLD,UNDERLINE和文本中的一些URL。我为其编写了一些函数,例如rtb.AddLink()。AddBold()等,包括一个很好的扩展用于添加URL,但似乎更合理地传递RTF格式并让控件更新格式。但是这将迫使我打破我需要BOLD或其他任何东西的每个点的文本。

我认为HTML会更方便,但我需要一个简单的解析器,至少比HTMLAgilitypack更简单。

如此简单的写一行:

log.write("<font color="red">This is error</font> and this is the link... etc")

任何人都有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您需要在字符串的第二部分中转义\

@"{\rtf1\ansi This "+text+"is in \\b bold\\b0.}"
                                 ^^      ^^

或再次使用@

@"{\rtf1\ansi This "+text+@"is in \b bold\b0.}"
                          ^