UWP多视图:应用程序调用了为不同线程编组的接口

时间:2017-05-21 10:54:24

标签: c# windows uwp

我收到错误:

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次,点击真的很快),然后打开第二个视图,崩溃将立即发生,几乎就像事件一样第一个视图已经在第二个视图中结束,当然,正在使用错误的调度程序。

对此的任何意见都非常赞赏。

干杯

加里

0 个答案:

没有答案