【发布时间】:2015-07-16 05:35:13
【问题描述】:
我有一个TabConrol,当用户执行某些操作时,会以编程方式添加一个新的TabItem。在此选项卡中,有一个 Frame 将包含所需的 Page.XAML。这一切都像这样完美地工作;
private void addNewTab()
{
TabItem tab = new TabItem();
Grid g = new Grid();
Frame f = newFrame();
g.Children.Add(f);
tab.Content = g;
MyTabControl.Items.Add(tab);
MyTabControl.SelectedItem = tab;
}
private Frame newFrame()
{
Frame f = new Frame();
//Full logic for Frame removed
f.Navigate(new MyPage());
return f;
}
问题是有时加载新的Frame 可能需要一些时间。所以我想做这个异步。所以当它加载时可能会有一个加载动画。我认为这会起作用;
private async void addNewTab()
{
TabItem tab = new TabItem();
Grid g = new Grid();
var test = Task<Frame>.Factory.StartNew(() => newFrame(selectTab, value));
await test;
f = test.Result;
g.Children.Add(f);
tab.Content = g;
MyTabControl.Items.Add(tab);
MyTabControl.SelectedItem = tab;
}
private Frame newFrame()
{
Frame f = new Frame();
//Full logic for Frame removed
f.Navigate(new MyPage());
return f;
}
问题是它在运行时在newFrame() 中的Frame f = new Frame(); 上返回跟随错误;
“System.InvalidOperationException”类型的异常发生在 PresentationCore.dll 但未在用户代码中处理
附加信息:调用线程必须是STA,因为很多 UI 组件需要这个。
开始认为我试图以错误的方式解决这个问题。处理这个问题的最佳方法是什么?
【问题讨论】:
标签: c# wpf async-await