2013-03-14 39 views
0

我尝试了下面的其他问题,通过使用Dispatcher从工作线程向WPF文本块添加一些内容。我使用下面的方法:InvalidOperationException更新TextBlock

private void AppendLineToChatBox(Inline message) 
{   
    chatBox.Dispatcher.BeginInvoke(new Action(() => 
    { 
     chatBox.Inlines.Add(message); 
     chatBox.Inlines.Add("\n"); 
     scroller.ScrollToBottom(); 
    })); 
} 

与XAML:

<Grid Height="200" Width="300" HorizontalAlignment="Left"> 
    <ScrollViewer Name ="scroller"> 
     <TextBlock TextWrapping="Wrap" Background="White" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="chatBox" /> 
    </ScrollViewer> 
</Grid> 

当我打电话AppendLineToChatBox()从后台线程我仍然得到以下异常:

系统。 InvalidOperationException未处理HResult = -2146233079
Message =调用线程无法访问此对象,因为 不同的线程拥有它。

正确的方法将不胜感激。

+1

在哪条线得到的异常呢?你确定它不是关于'scroller.ScrollToBottom()'? – maximpa 2013-03-15 00:06:13

+0

由chatBox.Inlines.Add抛出异常(消息) – CanCan 2013-03-15 00:08:34

+0

我不认为这是一个重复的问题,因为我已经在使用调度程序。 – CanCan 2013-03-15 00:10:17

回答

1

Inline类从DispatcherObject继承,这意味着由该类创建的任何对象都与它们在其上创建的线程绑定。通过查看代码,看起来AppendLineToChatBox方法由工作线程调用,工作线程也拥有Inline对象。

为了解决这个问题,你就需要构建内联对象在UI线程(例如代码中的BeginInvoke块)

+0

谢谢你的回答。 – CanCan 2013-03-15 00:32:39

相关问题