2012-08-03 48 views
1

我有用於閱讀網絡訂閱源的WP7應用程序。我使用Async CTP下載源,將它們保存在本地並使用它們,因此我可以離線使用App。Windows Phone上的異步CTP - 無法使用脫機?

當我連接到無線或手機時,一切正常。但是,當我下線,應用程序崩潰的開始,出現錯誤:

The remote server returned an error: NotFound.

調用堆棧的位置:

AsyncCTPLibrary_Phone.dll!System.Runtime.CompilerServices.AsyncVoidMethodBulder.SetException.AnonymousMethod_2(object state)

堆棧跟蹤:

at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result) at System.Net.Browser.ClientHttpWebRequest.<>c_DisplayClassa.b_8(Object state2) at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadPool.WorkItem.doWork(Object o) at System.Threading.Timer.ring()

任何想法,爲什麼?我不是自動downlodading什麼...

編輯:這裏的啓動代碼的一部分,我真的盡力避免調用Web客戶端,如果我脫機:

private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    MainPage_Init(); 
} 


private async void MainPage_Init() 
{ 
    string isConfig = await Load_Config(""); 

     if (isLoaded == false) 
     { 
     if (RSS.Parameters.AutoUpdate == "On") 
       { 
        string isDataOk = await Refresh_data(); 
        Refresh_ui(); 
       } 
      else 
       { 
        Refresh_ui(); 
       } 
     isLoaded = true; 
     } 
} 

async Task<string> Load_Config(string force) 
{ 
    if (!DeviceNetworkInformation.IsNetworkAvailable) 
    { 
     MessageBox.Show(RSS.Parameters.MessageNetwork); 
     //Load Config from IsoStore 
     return "No Network"; 
    } 
    else 
    { 
     string data = await new WebClient().DownloadStringTaskAsync(url); 
     return await GetConfig_Save_Local_XML_Async(data); 
     //Load Config from Web, Save to IsoStore 
    } 
} 

private async Task<string> Refresh_data() //load feeds form Internet and save them to IsoStore 
{ 
    IsolatedStorageSettings isoStorage = IsolatedStorageSettings.ApplicationSettings; 

    if (!DeviceNetworkInformation.IsNetworkAvailable) 
    { 
     ProgressBarSwitch("off"); 
     MessageBox.Show(RSS.Parameters.MessageNetwork); 

    } 
    else 
    { 
     foreach (RSSFeedInfo sfi in RSS.Parameters.FeedsInfo) 
     { 
     await Load_Web_XML(new Uri(sfi.Web_XML), sfi.Local_XML); 
     } 
     isoStorage["SettingsLastUpdate"] = System.DateTime.Now; 
     isoStorage.Save(); 
     ProgressBarSwitch("off"); 
    } 
    return "ok"; 
} 

private void Refresh_ui() //load feeds from IsoStore 
{ 
    //use local data 
} 
+0

您需要向我們展示你正在使用異步其中的部分代碼。 – 2012-08-03 07:55:46

+0

我添加了開始代碼發佈... – amentma 2012-08-03 08:57:40

回答

0

你應該總是網絡代碼周圍有try/catch。有很多可能的錯誤條件,其中脫機只有一個。

例如,如果您連接到沒有互聯網的本地WiFi,即使沒有互聯網接入,IsNetworkAvailable也會返回true

+0

你是絕對正確:)我添加了嘗試/抓住這個和問題消失。 – amentma 2012-08-06 05:21:30

0

看着this article from MSDNIsNetworkAvailable可以返回true即使沒有任何基礎服務的連接:

所以像這樣的代碼:

private void button1_Click(object sender, RoutedEventArgs e){ 
    var sb = new StringBuilder(); 
    sb.Append("Network available: "); 
    sb.AppendLine(DeviceNetworkInformation.IsNetworkAvailable.ToString()); 
    sb.Append("Cellular enabled: "); 
    sb.AppendLine(DeviceNetworkInformation.IsCellularDataEnabled.ToString()); 
    sb.Append("Roaming enabled: "); 
    sb.AppendLine(DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString()); 
    sb.Append("Wi-Fi enabled: "); 
    sb.AppendLine(DeviceNetworkInformation.IsWiFiEnabled.ToString()); 
    MessageBox.Show(sb.ToString());} 

能爲您提供的線沿線的輸出:

  • 網提供:真
  • 蜂窩激活:假
  • 漫遊功能:使假
  • 的Wi-Fi:假
相關問題