2015-07-06 19 views
16

Tôi cố gắng để mở một tập tin pdf bằng cách sử dụng mã dưới đây làm việc trước đây tôi sử dụng trên ứng dụng khác,System.Runtime.InteropServices.COMException khi tung ra một tập tin pdf trên Windows Phone

nhưng lần này tôi nhận được hệ thống. Runtime.InteropServices.COMException khi lưu lượng truy cập dòng này: Windows.System.Launcher.LaunchFileAsync (pdffile);

Ý nghĩa của ngoại lệ này là gì và cách loại bỏ nó?

Xin lưu ý rằng nếu không quan tâm đến ngoại lệ này (vô hiệu hóa nó),

tập tin vẫn không thể mở được.

Xin lưu ý: tập tin tồn tại trong thư mục bị cô lập của tôi (kiểm tra với wpowertool),

Tôi đã thử với 2 tác phẩm khác nhau nên nó không nên là một vấn đề của tập tin tham nhũng.

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

này MSDN post thuộc về tôi. Có, tệp đã được cài đặt và tôi có đầu đọc acrobat.

Xin lưu ý rằng mã C# này là phonegap/cordova plugin được gọi qua javascript trong ứng dụng lai của tôi.

+0

Chỉ cần bạn không nhận được câu trả lời như: * có tồn tại pdf và * bạn đã cài đặt Adobe Reader chưa? * Bạn có thể muốn làm rõ nếu [ bài đăng MSDN này thuộc về bạn] (https://social.msdn.microsoft.com/Forums/en-US/1c780b47-fa0b-4fa5-9333-7a4102f7d820/systemruntimeinteropservicescomexception-when-launching-a-file-on-windows- phone? forum = wpdevelop) –

+0

nếu không có tập tin nào tôi sẽ có một "nhận thức vô hình" hoặc như vậy – eeadev

+2

Vâng, tôi biết và chỉ cố gắng cứu bạn khỏi những câu trả lời vô dụng. –

Trả lời

5

Chú ý đến những nhận xét trong MSDN Article - Launcher.LaunchFileAsync(IStorageFile) này:

Ứng dụng gọi điện thoại phải được hiển thị cho người dùng khi API được gọi.
API này phải được gọi từ chuỗi ASTA (còn được gọi là chuỗi giao diện người dùng ).


Dành cho OP để chia sẻ giải pháp. Mã sau đây sẽ giúp những người khác gặp phải vấn đề này:

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

làm cách nào để mở đồng bộ? – eeadev

+0

Đã chỉnh sửa và upvoted bạn vì tôi thấy một số [xung đột ở đây] (https://social.msdn.microsoft.com/Forums/en-US/dc0ea02d-1f40-4150-9f5b-f6c3049b6393/can-i-use- không đồng bộ-api-đồng bộ). Một nhân viên MS nói * Truy cập bộ nhớ tương đối chậm và bạn * ** không nên ** làm điều đó trong chuỗi giao diện người dùng, * - ** nhưng trong tài liệu MSDN của bạn là bạn nên thực hiện nó trên chuỗi giao diện người dùng * *. Đó là cái nào ?? –

+1

nó hoạt động trên giao diện người dùng, theo cách này Deployment.Current.Dispatcher.BeginInvoke (() => {asyncOpenFile (options);}); – eeadev

Các vấn đề liên quan