我收到错误:
The application called an interface that was marshalled for a different thread.
当我在具有多个视图的UWP应用程序中创建用户控件的实例时。
当我只打开主视图时,错误永远不会发生,所以我认为它不像在非UI线程中运行UI代码那么简单。我确保我通过视图的调度程序运行所有UI代码,并且只有一个视图,它运行良好。
但是,在创建这样的新视图时:
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var newrootFrame = new Frame();
newrootFrame.Navigate(typeof(StarfirePage),null);
Window.Current.Content = newrootFrame;
newViewId = ApplicationView.GetForCurrentView().Id;
Window.Current.Activate();
});
await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
现在,当我创建这些用户控件时,我收到错误。但不是每一次,我都可以刷新控件列表,一次,两次,有时甚至更多,而且没关系,然后就会崩溃。所以基本上控件似乎是前几次正确的线程,然后不是。
这个问题只发生在我加载了第二个视图时,否则,它永远不会发生,所以我不认为这就像在非UI线程上创建UI组件一样简单,我已经在代码和我尽可能肯定这不会发生。新视图似乎发生了一些奇怪的事情。
另一个奇怪的症状是,在第二个视图中刷新控件的速度很慢,但是如果我快速点击按钮两次,就会发生崩溃。
另一个奇怪的事情是,如果我点击第一个视图中的控件多次刷新(如50次,点击真的很快),然后打开第二个视图,崩溃将立即发生,几乎就像事件一样第一个视图已经在第二个视图中结束,当然,正在使用错误的调度程序。
对此的任何意见都非常赞赏。
干杯
加里