2013-03-14 75 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

相關問題