C# InvalidOperationException更新文本块
我试着通过使用Dispatcher从工作线程向WPF文本块添加一些内容。我使用以下方法:C# InvalidOperationException更新文本块,c#,wpf,C#,Wpf,我试着通过使用Dispatcher从工作线程向WPF文本块添加一些内容。我使用以下方法: private void AppendLineToChatBox(Inline message) { chatBox.Dispatcher.BeginInvoke(new Action(() => { chatBox.Inlines.Add(message); chatBox.Inlines.Add("\n"); scro
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()时,仍然会出现以下异常:
System.InvalidOperationException未处理HResult=-2146233079Message=调用线程无法访问此对象,因为 不同的线程拥有它
正确的方法将不胜感激。内联类继承自DispatcherObject,这意味着该类创建的任何对象都绑定到创建它们的线程。从代码看,工作线程似乎正在调用AppendLineToChatBox方法,并且工作线程还拥有内联对象
要解决此问题,您需要在UI线程中构造内联对象(例如BeginInvoke中的代码块)现在在哪一行获得异常?你确定这不是关于
scroller.ScrollToBottom()
?chatBox.Inlines.Add(message)引发的异常。我认为这不是一个重复的问题,因为我已经在使用调度程序。