【发布时间】:2018-05-16 03:55:12
【问题描述】:
目前收到"The application called an interface that was marshalled for a different thread" 异常。
我根本不想显示这个控件,只是用它来将富文本转换为纯文本或将颜色/文本样式应用于纯文本并将其作为富文本输出。
有没有办法在非 UI 线程中创建 RichEditBox 控件?
谢谢。
【问题讨论】:
目前收到"The application called an interface that was marshalled for a different thread" 异常。
我根本不想显示这个控件,只是用它来将富文本转换为纯文本或将颜色/文本样式应用于纯文本并将其作为富文本输出。
有没有办法在非 UI 线程中创建 RichEditBox 控件?
谢谢。
【问题讨论】:
没有办法在非 UI 线程中创建控件。
如果您想使用 RichEditBox 功能,您仍然可以在您的 UI 中创建一个,但将其隐藏 (Visibility = Visibility.Collapsed)。
【讨论】:
“应用程序调用了一个为不同线程编组的接口”
解决这个问题的常用方法是使用CoreDispatcher 类。CoreDispatcher.RunAsync 方法从工作线程调度 UI 线程上提供的回调,并异步返回结果。例如:
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
RichEditBox richEditBox = new RichEditBox();
root.Children.Add(richEditBox);
});
查看我链接的文档以获取更多详细信息。
【讨论】: