2015-07-06 10 views
16

Sto cercando di aprire un file PDF usando il codice seguente lavoro ho usato in precedenza su un altro app,System.Runtime.InteropServices.COMException quando si lancia un file PDF su Windows Phone

ma questa volta sto ottenendo sistema. Runtime.InteropServices.COMException quando il flusso raggiunge questa linea: Windows.System.Launcher.LaunchFileAsync (pdffile);

Qual è il significato di questa eccezione e come eliminarla?

Si prega di notare che, senza preoccuparsi di questa eccezione (disabilitarlo),

il file ancora non può essere aperto.

Si prega di notare: il file esiste nella mia cartella isolato (controllato con wpowertool),

Ho provato con 2 diversi file in modo che non dovrebbe essere una questione di corruzione dei file.

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); 
    } 

questo MSDN post appartiene a me. Sì, il file è installato e ho acrobat reader.

Si prega di notare che questo codice C# è un phonegap/cordova plugin che viene chiamato tramite javascript nella mia applicazione ibrida.

+0

Solo così non si ottengono risposte come: * esiste il pdf * e * hai installato Adobe Reader? * Potresti voler chiarire se [ questo post MSDN appartiene a te] (https://social.msdn.microsoft.com/Forums/en-US/1c780b47-fa0b-4fa5-9333-7a4102f7d820/systemruntimeinteropservicescomexception-when-launching-a-file-on-windows- phone? forum = wpdevelop) –

+0

se non ci fosse il file avrei una "filenotfoundexception" o tale – eeadev

+2

Sì, lo so e stavo solo cercando di salvarti dall'ottenere risposte inutili. –

risposta

5

Prestare attenzione alle osservazioni in questo MSDN Article - Launcher.LaunchFileAsync(IStorageFile):

L'applicazione chiamata deve essere visibile all'utente quando l'API viene richiamato.
Questa API deve essere chiamata da un thread ASTA (noto anche come thread UI ).


up enormi per l'OP per la condivisione della soluzione. Il seguente codice dovrebbe aiutare gli altri a risolvere questo problema:

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

per favore come posso aprirlo in modo sincrono? – eeadev

+0

Modificato e potenziato perché vedo alcuni [conflitti qui] (https://social.msdn.microsoft.com/Forums/en-US/dc0ea02d-1f40-4150-9f5b-f6c3049b6393/can-i-use- asincrono-api-sincrono). Un dipendente di MS dice * L'accesso allo storage è relativamente lento e tu * ** non dovresti ** * farlo nel thread dell'interfaccia utente, * - ** eppure nel MSDN doco dice che dovresti eseguirlo sul thread dell'interfaccia utente * *. Qual é?? –

+1

funziona sull'interfaccia utente, in questo modo Deployment.Current.Dispatcher.BeginInvoke (() => {asyncOpenFile (opzioni);}); – eeadev

Problemi correlati