在WPF应用程序中,我使用自定义样式的文本框,其中ContextMenu被覆盖,如下所示:
这段代码在单线程中可以完美运行,但是如果我在不同的线程中运行带有TextBox的窗口,则会出现问题:
<Style TargetType="{x:Type TextBox}">
<Setter Property="ContextMenu">
<ContextMenu>
<MenuItem Header="Copy"/>
</ContextMenu>
</Setter>
</Style>
这段代码在单线程中可以完美运行,但是如果我在不同的线程中运行带有TextBox的窗口,则会出现问题:
Thread thread = new Thread(()=>
{
TestWindow wnd = new TestWindow();
wnd.ShowDialog();
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
但是这会导致InvalidOperationException "调用线程无法访问此对象,因为不同的线程拥有它。".
如何避免这个问题?