2016-02-27 85 views
-2

PivotItem pivotItem = new PivotItem();我得到Additional information: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))。它应该是什么?我很困惑它。C#:数据透视项创建出错

代码:

foreach (Source source in sources) 
{ 
    PivotItem pivotItem = new PivotItem(); /* At this point it falls. */ 
    pivotItem.Header = source.Name; 
    pivotItem.Margin = new Thickness(0, -10, 0, 0); 

    ListView listView = new ListView(); 
    listView.ItemsSource = source.Articles; 
    listView.ItemTemplate = (DataTemplate)Resources["MainItemTemplate"]; 
    listView.ItemClick += OpenArticle_ItemClick; 
    listView.SelectionMode = ListViewSelectionMode.None; 
    listView.IsItemClickEnabled = true; 

    pivotItem.Content = listView; 
    pvtMain.Items.Add(pivotItem); 
} 
+0

我不知道,没有任何额外的上下文(“错误代码或任何细节”),我们可以帮助你。 –

+0

@EugenePodskal请仔细阅读我编辑的帖子,提供错误的详细信息。 –

+0

什么是'PivotItem'?你在什么情况下调用这个代码?不要只发布异常错误消息,发布[MCVE]。 –

回答

1

基于之外,你似乎在试图创建比UI线程的线程上一个新PivotItem。您只能与UI线程中的UI元素进行交互。

您可能从事件处理程序中调用此代码,该事件处理程序未从UI事件触发。您应该能够通过使用Dispatcher切换回UI线程来解决问题:

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
{ 
    foreach (Source source in sources) 
    { 
     PivotItem pivotItem = new PivotItem(); /* At this point it falls. */ 
     pivotItem.Header = source.Name; 
     pivotItem.Margin = new Thickness(0, -10, 0, 0); 

     ListView listView = new ListView(); 
     listView.ItemsSource = source.Articles; 
     listView.ItemTemplate = (DataTemplate)Resources["MainItemTemplate"]; 
     listView.ItemClick += OpenArticle_ItemClick; 
     listView.SelectionMode = ListViewSelectionMode.None; 
     listView.IsItemClickEnabled = true; 

     pivotItem.Content = listView; 
     pvtMain.Items.Add(pivotItem); 
    } 
}); 
+0

谢谢,它的工作原理。 –