2015-07-06 6 views
16

próbuję otworzyć plik PDF za pomocą kodu poniżej roboczą ja poprzednio używany w innej aplikacji,System.Runtime.InteropServices.COMException podczas uruchamiania pliku PDF na Windows Phone

ale tym razem jestem coraz System. Runtime.InteropServices.COMException, gdy przepływ uderza w tę linię: Windows.System.Launcher.LaunchFileAsync (pdffile);

Jakie jest znaczenie tego wyjątku i jak się go pozbyć?

Należy pamiętać, że nie dbając o to wyjątek (wyłączenie go),

plik nadal nie można otworzyć.

Uwaga: plik istnieje w moim folderze pojedyncze (sprawdzane wpowertool)

Próbowałem z 2 różnych plików, więc nie powinno to być sprawą korupcji plików.

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

to MSDN post należy do mnie. Tak, plik jest zainstalowany i mam czytnik Acrobat.

Należy pamiętać, że ten kod C# to phonegap/cordova plugin, który jest wywoływany przez javascript w mojej aplikacji hybrydowej.

+0

Tak więc nie dostaniesz odpowiedzi, takich jak: * robi pdf istnieją * i * Jeżeli masz zainstalowany program Adobe Reader * warto wyjaśnić, jeśli [? ten post MSDN należy do Ciebie] (https://social.msdn.microsoft.com/Forums/en-US/1c780b47-fa0b-4fa5-9333-7a4102f7d820/systemruntimeinteropservicescomexception-when-launching-a-file-on-windows- phone? forum = wpdevelop) –

+0

gdyby nie było pliku, który bym miał "filenotfoundexception" lub taki – eeadev

+2

Tak, wiem i chciałem tylko uratować cię przed uzyskaniem bezużytecznych odpowiedzi. –

Odpowiedz

5

zwrócić uwagę na uwagi w tej MSDN Article - Launcher.LaunchFileAsync(IStorageFile):

Aplikacja wywołujący musi być widoczne dla użytkownika, gdy API jest wywoływany.
Ten interfejs API musi zostać wywołany z wątku ASTA (zwanego również wątkiem interfejsu użytkownika ).


Ogromne zasilacza do PO za udostępnienie rozwiązania. Poniższy kod powinien pomóc innym obejść ten problem:

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

proszę, jak mogę otworzyć to synchronicznie? – eeadev

+0

Zmieniono i przegłosowałem Cię, ponieważ widzę niektóre [konflikty tutaj] (https://social.msdn.microsoft.com/Forums/en-US/dc0ea02d-1f40-4150-9f5b-f6c3049b6393/can-i-use- asynchronicznie-api-synchronicznie). Pracownik MS mówi: * Uzyskanie dostępu do pamięci jest stosunkowo powolne, a ty * ** nie * musisz robić tego w wątku UI, * - ** jednak w dokumencie MSDN jest napisane, że powinieneś wykonać to w wątku UI * *. Który to?? –

+1

działa w interfejsie użytkownika, w ten sposób Deployment.Current.Dispatcher.BeginInvoke (() => {asyncOpenFile (options);}); – eeadev