使用WinForms应用程序时出现异常:(RPC_E_CANTCALLOUT_ININPUTSYNCCALL)

时间:2015-04-17 06:24:39

标签: c# winforms comexception

我创建了一个使用BackgroundWorker的WinForms应用程序。 BackgroundWorer中的方法在RichTextBox上显示消息。 _TextChanged事件处理程序滚动到RichTextBox的末尾。

现在的问题是,我得到了一个

  

UnHandled COMException:0x8001010D   (RPC_E_CANTCALLOUT_ININPUTSYNCCALL)

从_TextChanged事件处理程序调用RichTextBox.ScrollToCaret()时。 可能是什么问题呢?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如您在评论中提到的那样,您可以直接从后台工作人员访问RichTextBox。

严禁从多个线程访问UI控件。只有UI线程才能访问控件。

您解决了这个问题,您需要将操作UI控件的代码(本例中为RichTextBox)的执行封送到主UI线程(拥有RichTextBox的线程)上。

您可以在背景工作代码中执行此操作:

Invoke(new Action(() =>
{
    // code that manipulates the RichTextBox here
}));