2011-10-08 64 views
1

我正在製作一個WP7,它從圖庫或相機中獲取圖像,並通過按下按鈕將其發送到一個web服務,方法是將其編碼爲base64字符串。我目前正在使用VS2010中包含的WP7模擬器。System.MethodAccessException在初始化FileStream時Windows Phone 7

爲此,我嘗試使用FileStream對象來打開存儲在圖像路徑中的圖像。然而,當我嘗試初始化的FileStream,我在控制檯得到消息:

類型的第一個機會異常「System.MethodAccessException」 發生在LiveAndesApp.dll

「taskhost.exe」 (管理):加載類型的 'System.ServiceModel.Web.dll'

第一 機會異常 'System.Xml.XmlException' 發生在 system.xml.dll的

後面跟着很多很多的System.Xml.XmlException。奇怪的是,我把FileStream的創建置於一個try-catch語句中,該語句捕獲System.MethodAccessException和E,並且程序甚至不會輸入它,它只是繼續使用sendSighting

我在做什麼錯我該如何改進呢?非常感謝!

這裏是完整的代碼。這就是我稱之爲轉換圖片的方法。

public void next_Click(object sender, EventArgs e) 
     { 
      //Dependera de si seguimos flujos offline y online. 
      if (!offline_mode) 
      { 
       NavigationService.Navigate(new Uri("/Pages/SendInformation.xaml?mode=online", UriKind.Relative)); 
       Controller c = new Controller(); 
       c.sendSighting(); 
      } 
      else { NavigationService.Navigate(new Uri("/Pages/SendInformation.xaml?mode=offline", UriKind.Relative)); } 

這是Controller類的代碼。爲了簡潔起見,我省略了與網絡請求相關的所有內容:

public class Controller 
    { 
     public Controller() 
     { } 

     /// <summary> 
     /// Manda un avistamiento al servicio. 
     /// </summary> 
     public void sendSighting() 
     { 
      //Obtenemos el avistamiento 
      AddSightingFlowObject flow_object = AddSightingFlowObject.getInstance(); 

      //Creamos el objeto json y lo incorporamos al body del request. 
      JObject json = new JObject(); 

      //Si la imagen no es nula, tenemos que procesarla. 
      JArray arr = new JArray(new List<String>()); 
      if (flow_object.ImageControl != null) 
      { 
       String image_base_64 = ConvertImageToBase64(flow_object.ImagePath); 
       arr.Add(image_base_64); 
      } 
      else 
      { 
       arr.Add(""); 
      } 
      json.Add("PhotoURL", arr); 
     } 


     public String ConvertImageToBase64(String imagePath) 
     { 
      String image_base_64 = ""; 
      FileStream fs; 
      Byte[] arr; 

      try 
      { 
       fs = new FileStream(imagePath, FileMode.Open); 
       arr = new Byte[fs.Length]; 
       fs.Read(arr, 0, arr.Length); 
       image_base_64 = System.Convert.ToBase64String(arr); 
      } 
      catch (System.MethodAccessException e) 
      { 
       String error = "Error: " + e.Message + "Stack Trace: " + e.StackTrace; 
      } 

      return image_base_64; 
     } 

} 

謝謝你的時間! :d

+0

還有另一種捕獲System.IO命名空間的一部分:使類對next_Click的調用是從PhonePage繼承的公共部分類。也許這就是問題的原因,正如http://msdn.microsoft.com/en-us/library/system.methodaccessexception.aspx所解釋的那樣。但是,如果我嘗試在定義中刪除部分,它會說「缺少對類型爲LiveAndesApp.Pages.AddSightingSummary的聲明的部分修飾符;此類型的另一部分聲明存在」。我該如何解決這個問題?謝謝! :d –

回答

1

使用獨立存儲,而不是System.IO

的FileStream是可以與水木清華被替換像IsolatedStorageFileStream

Link with help