在Windows Phone上启动pdf文件时出现System.Runtime.InteropServices.COMException

时间:2015-07-06 12:36:00

标签: c# windows-phone-8 visual-studio-cordova

我正在尝试使用以前在其他应用上使用的以下工作代码打开pdf文件,

但是这次当流程到达这一行时我得到System.Runtime.InteropServices.COMException:Windows.System.Launcher.LaunchFileAsync(pdffile);

这个例外的含义是什么以及如何摆脱它?

请注意,如果不关心此异常(禁用它),

文件仍然无法打开。

请注意:该文件存在于我的隔离文件夹中(使用wpowertool检查),

我尝试了2个不同的文件,所以它不应该是文件损坏的问题。

    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 post属于我。是的,文件已安装,我有acrobat reader。

请注意,此C#代码是phonegap/cordova plugin,在我的混合应用程序中通过javascript调用。

1 个答案:

答案 0 :(得分:5)

请注意此MSDN Article - Launcher.LaunchFileAsync(IStorageFile)

中的评论
  

调用API时,调用应用程序必须对用户可见   必须从ASTA线程(也称为UI)调用此API   线程)。

<小时/> 巨大的OP分享解决方案。以下代码应该可以帮助其他人解决此问题:

Deployment.Current.Dispatcher.BeginInvoke(() => { asyncOpenFile(options); });