【发布时间】:2014-11-25 19:25:55
【问题描述】:
这可能是一个非常简单的问题,如果有重复,请提前抱歉,但我还没有找到任何关于这个特定问题的信息。
我在为来自不同线程的 RichTextBox 中的特定文本部分着色时遇到问题。我想在 RichTextBox 中附加一行文本,同时用指定的颜色为该行着色。我能够附加文本并为其着色,但无法从另一个线程执行此操作,尽管我能够从 Dispatcher 附加纯文本。
这是我的代码:
private void UpdateTextbox(string message, Brush color)
{
rtbOutput.Dispatcher.Invoke((Action)(() =>
{
rtbOutput.Selection.Select(rtbOutput.Document.ContentEnd, rtbOutput.Document.ContentEnd);
rtbOutput.Selection.Text = message;
rtbOutput.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, color);
})
);
}
当我尝试从另一个线程运行它时,我收到一条错误消息,告诉我无法访问该对象,因为它属于另一个线程。我该如何解决?
编辑:似乎 RichTextBox 不是问题,但 Brush 对象是问题,因为如果我在 Invoke 方法中指定它,我可以很好地更改颜色,但如果我将它作为参数传递则不行。
【问题讨论】:
-
UI 对象只能由 UI 线程更新。如果您使用的是 Tasks,则可以使用
task.ContinueWith(() => { // code here }, TaskScheduler.FromCurrentSynchronizationContext());
标签: c# wpf richtextbox dispatcher