Window.Current.Activate()导致“应用程序称为为不同线程编组的接口。”

时间:2015-05-06 11:20:32

标签: c# multithreading windows-phone-8.1

我得到了:

  

该应用程序调用了一个为a编组的接口   不同的主题。

错误在线“Window.Current.Activate();”按下我手机上的“windows”按钮(暂停应用程序),然后从申请清单。如果我按“windows”按钮,然后按“返回”按钮返回应用程序 - 没问题。 此外,我第一次运行应用程序时没有问题。

如果应用程序在启动按钮后无法恢复,则下次从头开始并正常工作,直到我按“窗口”然后再次尝试启动应用程序。

我也尝试过:

var disp = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
disp.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            Window.Current.Activate());

然后应用程序无法恢复,尽管没有发生错误。 我在应用程序中做了什么: 我有一个stackpanel,我通过 c#代码添加元素。那部分我也尝试过调度员,但没有帮助。

我还异步读/写文件。也许这也有帮助。

如果你可以帮我简单地关闭应用程序而不是暂停,虽然它不是最好的解决方案,但它仍然可以帮助我。谢谢!

更新: 以下是该函数的完整代码:

protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
#if DEBUG
        if (System.Diagnostics.Debugger.IsAttached)
        {
            DebugSettings.EnableFrameRateCounter = true;
        }
#endif

        Frame rootFrame = Window.Current.Content as Frame;

        // Не повторяйте инициализацию приложения, если в окне уже имеется содержимое,
        // только обеспечьте активность окна
        if (rootFrame == null)
        {
            // Создание фрейма, который станет контекстом навигации, и переход к первой странице
            rootFrame = new Frame();

            // TODO: Измените это значение на размер кэша, подходящий для вашего приложения
            rootFrame.CacheSize = 1;

            // Задайте язык по умолчанию
            rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];

            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                // TODO: Загрузить состояние из ранее приостановленного приложения
            }

            // Размещение фрейма в текущем окне
            Window.Current.Content = rootFrame;
        }

        if (rootFrame.Content == null)
        {
            // Удаляет турникетную навигацию для запуска.
            if (rootFrame.ContentTransitions != null)
            {
                this.transitions = new TransitionCollection();
                foreach (var c in rootFrame.ContentTransitions)
                {
                    this.transitions.Add(c);
                }
            }

            rootFrame.ContentTransitions = null;
            rootFrame.Navigated += this.RootFrame_FirstNavigated;

            // Если стек навигации не восстанавливается для перехода к первой странице,
            // настройка новой страницы путем передачи необходимой информации в качестве параметра
            // навигации
            if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
            {
                throw new Exception("Failed to create initial page");
            }
        }

        // Обеспечение активности текущего окна
        //if (e.PreviousExecutionState != ApplicationExecutionState.Running)
        //Dispatcher.Invoke((Action)(() => messageList.Add(read)));
        //var disp = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
        var disp = Window.Current.Dispatcher; 
        disp.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            Window.Current.Activate());
    }

1 个答案:

答案 0 :(得分:0)

我已将完整代码复制到一个新的枢轴项目中(之前我开始了一个空白的Windows手机项目)。现在它有效,虽然我没有改变任何东西。

谢谢大家的帮助!