我有一个用户控件添加到我的主窗口。主代码不断接收TCP消息并相应地与UserControl交互。其中一个用户控件的方法是由主称为是方法addMessage:线程无法访问对象
internal void AddMessage(Paragraph p)
{
if (txtViewer.Dispatcher.CheckAccess())
{
txtViewer.Document.Blocks.Add(p);
}
else
{
Dispatcher.Invoke(new Action(() =>
{
txtViewer.Document.Blocks.Add(p);
}
));
}
}
内Dispatcher.Invoke线总是引发InvalidOperationException。我环顾了类似的问题,其中大多数是Dispatcher未被使用的情况,所以我不知道为什么我的代码无法工作。我想我错误地使用它,或者它可能与线程之间传递的段落对象有关。
感谢, 贾里德
您是否尝试在UI线程中调用'AddMessage'(=而不调用Dispatcher.Invoke')以查看是否有与线程无关的错误? –
使用BeginInvoke而不是Invoke。 – Candide
我不是这方面的专家。我有一个类似的问题,无法绑定从Dispatcher派生的FlowDocument的DocumentViewer异步。用户界面无法与另一个调度器上派生的对象通信。我必须使用XamlWriter.Save将FlowDocument序列化为字符串(不派生自调度程序),然后在Converter中对其进行反序列化。 – Paparazzi