我需要从另一个线程访问TabControl
的SelectedIndex
财产获得的SelectedIndex,我试图用一个Dispatcher
这样的:试图从另一个线程
public ListView CurrentTab
{
get
{
ListView listView = null;
Action action =() =>
{
int currentTab = MainWindow.AppWindow.TabControl.SelectedIndex;
//Check wich tab is opened
switch (currentTab)
{
case 0:
listView = MainWindow.AppWindow.PlayingControl.Playing;
break;
case 1:
listView = MainWindow.AppWindow.AllMatchesControl.AllMatches;
break;
case 2:
listView = MainWindow.AppWindow.CustomMatchesControl.CustomMatches;
break;
}
};
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(action));
return listView;
}
}
,但我得到
系统.InvalidOperationException
无法通过调用线程访问对象,因为该对象由其他线程属性拥有。
我想通过SelectedIndex
返回一个列表,我做错了什么?
你能告诉你为什么你需要通过不同的线程访问selectedindex吗?如果你访问你如何同步它们?换句话说,如果你在值改变之前从另一个线程返回selectedindex,你怎么能够捕获值? – FreeMan
@FreeMan因为我需要返回一个特定的列表,每个选项卡包含一个列表,所以如果选择了选项卡2,我需要返回列表CustomMatches。 而应用程序有不同的线程调用'CurrentTab' – AgainMe
您必须使用TabControl所属的Dispatcher。所以,如果你在一个不同的线程上,并且你编写了'Application.Current.Dispatcher',它不一定会给你找到你想要的调度器。每个FrameworkElement都有一个包含其调度程序线程的属性。 – Meloviz