Приложение UWP зависло на заставке при активации файла - PullRequest
0 голосов
/ 22 октября 2018

У меня есть интересная проблема, которую трудно отладить, так как это происходит, когда я запускаю это приложение, используя активацию файла.Если я запускаю приложение напрямую, нет проблем.Если я дважды щелкаю по связанному файлу, он зависает на заставке, даже не проходя мимо этого (установите точку останова отладки на InitializeComponent, она даже не добирается).

Итак, я сделал следующее:на вкладке «Декларация манифеста» я добавил сопоставление типов файлов к созданному мною типу файлов и проверил «Открыть безопасно».Затем использовали OnNavigatedTo override, чтобы перехватить имя файла, который использовался для активации.Я получаю заставку, а затем ничего.

Если я просто запускаю приложение и открываю файл изнутри, все работает.Что меня удивляет, так это то, что я использую точный OnNavigatedTo в другом приложении, и он работает безупречно.

Вот мой OnNavigatedTo:

    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        var args = e.Parameter as Windows.ApplicationModel.Activation.IActivatedEventArgs;
        if (args != null)
        {
            if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.File)
            {
                var fileArgs = args as Windows.ApplicationModel.Activation.FileActivatedEventArgs;
                string strFilePath = fileArgs.Files[0].Path;
                var file = (StorageFile)fileArgs.Files[0];
                //MainPlayList is a custom object used to manipulate the playlist of stuff I'm building.
                MainPlayList = new Playlist();
                MainPlayList.InitializePlayList();
                await MainPlayList.AddImageToPlaylist(file);
             }
       }
    }

Я проверил манифест пакета длярабочее приложение и это.Помимо названия, они идентичны.Кто-то упомянул около 18 месяцев назад, что это может быть связано с версией Windows, используемой как минимум.Попробовал и это безрезультатно.

1 Ответ

0 голосов
/ 22 октября 2018

Это означает, что приложение никогда не покидает обработчик активации в App.xaml.cs - когда приложение еще не запущено, и файл активирован, оно никогда не переходит к OnLauched и вызывает OnActivated метод ,которую вы можете переопределить - и вы должны - инициализировать корень Frame и активировать Window.По сути, вам нужно выполнить те же шаги, что и в OnLaunched - поэтому обычно вы можете просто превратить инициализацию в метод и вызывать его из OnLaunched и OnActivated.

Для примера проверьте Пример AssociationLaunching на GitHub, в частности здесь - OnFileActivated (альтернативный способ отловить активацию файла).

protected override void OnFileActivated(FileActivatedEventArgs e)
{
    Frame rootFrame = CreateRootFrame();

    if (rootFrame.Content == null)
    {
        if (!rootFrame.Navigate(typeof(MainPage)))
        {
            throw new Exception("Failed to create initial page");
        }
    }

    var p = rootFrame.Content as MainPage;
    p.NavigateToPageWithParameter(2, e);

    // Ensure the current window is active
    Window.Current.Activate();
}

В случае, если приложение раньше не запускалось,CreateRootFrame сначала создает и устанавливает корневой фрейм так, чтобы он был готов.Наконец, он использует Window.Current.Activate(), чтобы убедиться, что окно активно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...