2016-09-21 66 views
-1

我需要從另一個線程訪問TabControlSelectedIndex財產獲得的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返回一個列表,我做錯了什麼?

+0

你能告訴你爲什麼你需要通過不同的線程訪問selectedindex嗎?如果你訪問你如何同步它們?換句話說,如果你在值改變之前從另一個線程返回selectedindex,你怎麼能夠捕獲值? – FreeMan

+0

@FreeMan因爲我需要返回一個特定的列表,每個選項卡包含一個列表,所以如果選擇了選項卡2,我需要返回列表CustomMatches。 而應用程序有不同的線程調用'CurrentTab' – AgainMe

+0

您必須使用TabControl所屬的Dispatcher。所以,如果你在一個不同的線程上,並且你編寫了'Application.Current.Dispatcher',它不一定會給你找到你想要的調度器。每個FrameworkElement都有一個包含其調度程序線程的屬性。 – Meloviz

回答

0

當你知道它會通過比其他UI另一個線程來完成,只需調用你需要什麼

int currentTab = 0; 
MainWindow.AppWindow.TabControl.Dispatcher.Invoke(() => { 
    currentTab = MainWindow.AppWindow.TabControl.SelectedIndex; 
}); 
+0

我沒有任何InvokeRequired – AgainMe

+0

對不起,我錯過了它是WPF。原始答案已更新。 – jbmintjb

0
public ListView CurrentTab 
{ 
    get 
    { 
     return (ListView)this.Dispatcher.Invoke(
      new Func<ListView>(() => 
      { 
       ListView listView = null; 
       int currentTab = tabControl.SelectedIndex; 
       switch (currentTab) 
       { 
        case 0: 
         listView = new ListView(); 
         listView = list_1; 
         break; 
        case 1: 
         listView = list_2; 
         break; 
        case 2: 
         listView = list_3; 
         break; 
       } 
       return listView; 
      })); 
    } 
} 

這可能工作。

+0

謝謝,但這將返回一個例外的屬性列表:http://imgur.com/a/DPirO – AgainMe

+0

有趣的是它適合我。 – FreeMan

+0

有沒有解決這個問題的建議? – AgainMe