我创建了一个使用BackgroundWorker的WinForms应用程序。 BackgroundWorer中的方法在RichTextBox上显示消息。 _TextChanged事件处理程序滚动到RichTextBox的末尾。
现在的问题是,我得到了一个
UnHandled COMException:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL)
从_TextChanged事件处理程序调用RichTextBox.ScrollToCaret()时。 可能是什么问题呢?如何解决这个问题?
答案 0 :(得分:0)
正如您在评论中提到的那样,您可以直接从后台工作人员访问RichTextBox。
严禁从多个线程访问UI控件。只有UI线程才能访问控件。
您解决了这个问题,您需要将操作UI控件的代码(本例中为RichTextBox)的执行封送到主UI线程(拥有RichTextBox的线程)上。
您可以在背景工作代码中执行此操作:
Invoke(new Action(() =>
{
// code that manipulates the RichTextBox here
}));