PowerShell多线程Runspace中WPF ComboBox内容可显但无法访问
PowerShell WPF多线程下ComboBox控件访问异常问题
问题场景
使用PowerShell开发WPF UI时遇到ComboBox控件访问异常,对应的XAML代码如下:
<ComboBox x:Name="CB_Failover" Width="172" Margin="5,5,0,0" IsReadOnly="True"> <ComboBoxItem x:Name="CBI_CBFailover_ALL" Content="All"/> <ComboBoxItem x:Name="CBI_CBFailover_core" Content="Core"/> <ComboBoxItem x:Name="CBI_CBFailover_wave1" Content="Wave 1"/> <ComboBoxItem x:Name="CBI_CBFailover_wave2" Content="Wave 2"/> <ComboBoxItem x:Name="CBI_CBFailover_wave3" Content="Wave 3"/> </ComboBox>
异常现象
执行$synchash.window.showdialog()后,UI中ComboBox的选项能正常显示,但访问$synchash.cb_failover时,其Items属性显示为空数组,进一步查看发现控件的Name和Content属性均无值。
排查结论
问题由多线程环境导致:脚本通过创建新Runspace加载XAML,并将控件存入同步哈希表syncHash,此时能获取到控件对象,但控件的内容丢失;而在单线程全局环境下,可正常获取ComboBox的Items.Content值。
疑问
为何多线程环境下UI能正常显示ComboBox内容,却无法通过控件对象访问这些内容?
内容的提问来源于stack exchange,提问作者Justin Beagley
相关产品推荐
相关产品推荐

