System.Runtime.InteropServices.COMException при запуске pdf файла на Windows Phone

Я пытаюсь открыть pdf файл, используя приведенный ниже рабочий код, который я ранее использовал в другом приложении,

но на этот раз я получаю System.Runtime.InteropServices.COMException, когда поток попадает в эту строку: Windows.System.Launcher.LaunchFileAsync(pdffile);

В чем смысл этого исключения и как избавиться от него?

Обратите внимание, что, не заботясь об этом исключении (отключив его),

файл не может быть открыт.

Обратите внимание: файл существует в моей изолированной папке (отмечен с помощью wpowertool),

Я пробовал с двумя разными файлами, поэтому он не должен быть причиной повреждения файлов.

    public void openFile(string options)
    {
        System.Diagnostics.Debug.WriteLine("options: " + options);
        string optVal = JsonHelper.Deserialize<string[]>(options)[0];
        asyncOpen(optVal);
    }

    public async Task asyncOpen(string filename)
    {
            filename = filename.Substring(2, filename.Length - 2);
            filename = filename.Replace("//", "/").Replace("/", "\\");
            Windows.Storage.StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
            Debug.WriteLine("local: " + local.Path);
            Windows.Storage.StorageFile pdffile = await local.GetFileAsync(filename);
            Debug.WriteLine("pdffile: " + pdffile.Name);
            //// Launch the pdf file.
                Windows.System.Launcher.LaunchFileAsync(pdffile); 
    }

этот сообщение MSDN принадлежит мне. Да, файл установлен, и у меня есть программа чтения acrobat.

Обратите внимание, что этот код С# представляет собой плагин phonegap/cordova, который вызывается через javascript в моем гибридном приложении.

Ответы

Ответ 1

Обратите внимание на примечания в этой статье MSDN - Launcher.LaunchFileAsync(IStorageFile):

Вызывающее приложение должно быть видимым пользователю при вызове API.
Этот API должен быть вызван из потока ASTA (также известного как пользовательский интерфейс) нить).


Огромные взлеты для OP для совместного использования решения. Следующий код должен помочь другим решить эту проблему:
Deployment.Current.Dispatcher.BeginInvoke(() => { asyncOpenFile(options); });