C# Windows Phone上的异步CTP-无法脱机使用吗?
我有这个WP7应用程序用于阅读web提要。我使用AsyncCTP下载提要,在本地保存并使用它们,这样我就可以脱机使用应用程序了 当我连接到wifi或手机时,一切都很好。但当我脱机时,应用程序会在启动时崩溃,并出现错误: 远程服务器返回错误:NotFound 调用堆栈位置: AsyncCTPLibrary_Phone.dll!System.Runtime.CompilerServices.AsyncVoidMethodBulder.SetException.AnonymousMethod_2(对象 (州) 堆栈跟踪: 位于System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态)位于 System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)在System.Net.WebClient.GetWebResponse(WebRequest)中 请求,IAsyncResult结果)位于 System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult结果) 在 System.Net.Browser.ClientHttpWebRequest.c_DisplayClassa.b_8(对象 (2)在 System.Threading.ThreadPool.WorkItem.WaitCallback\u上下文(对象 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback回调、对象状态)位于 位于的System.Threading.ThreadPool.WorkItem.doWork(对象o) System.Threading.Timer.ring() 知道为什么吗?我不会自动下载任何东西 编辑:这是代码的开始部分,我确实尽量避免在脱机时调用web客户端:C# Windows Phone上的异步CTP-无法脱机使用吗?,c#,windows-phone-7,async-ctp,C#,Windows Phone 7,Async Ctp,我有这个WP7应用程序用于阅读web提要。我使用AsyncCTP下载提要,在本地保存并使用它们,这样我就可以脱机使用应用程序了 当我连接到wifi或手机时,一切都很好。但当我脱机时,应用程序会在启动时崩溃,并出现错误: 远程服务器返回错误:NotFound 调用堆栈位置: AsyncCTPLibrary_Phone.dll!System.Runtime.CompilerServices.AsyncVoidMethodBulder.SetException.AnonymousMethod_2(对象
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
}
private void主页\u已加载(对象发送方、路由目标方)
{
MainPage_Init();
}
私有异步void主页_Init()
{
字符串isConfig=wait Load_Config(“”);
如果(isLoaded==false)
{
如果(RSS.Parameters.AutoUpdate==“打开”)
{
字符串isDataOk=等待刷新_数据();
刷新用户界面();
}
其他的
{
刷新用户界面();
}
isLoaded=true;
}
}
异步任务加载配置(字符串强制)
{
如果(!DeviceNetworkInformation.IsNetworkAvailable)
{
Show(RSS.Parameters.MessageNetwork);
//从IsoStore加载配置
返回“无网络”;
}
其他的
{
字符串数据=等待新的WebClient()。下载StringTaskAsync(url);
返回wait wait GetConfig\u Save\u Local\u XML\u Async(数据);
//从Web加载配置,保存到IsoStore
}
}
私有异步任务Refresh_data()//从Internet加载提要并将其保存到IsoStore
{
IsolatedStorageSettings isoStorage=IsolatedStorageSettings.ApplicationSettings;
如果(!DeviceNetworkInformation.IsNetworkAvailable)
{
自动开关(“关闭”);
Show(RSS.Parameters.MessageNetwork);
}
其他的
{
foreach(RSS.Parameters.FeedsInfo中的RSSFeedInfo-sfi)
{
等待加载Web_XML(新Uri(sfi.Web_XML)、sfi.Local_XML);
}
isoStorage[“SettingsLastUpdate”]=System.DateTime.Now;
isoStorage.Save();
自动开关(“关闭”);
}
返回“ok”;
}
私有void Refresh\u ui()//从IsoStore加载提要
{
//使用本地数据
}
您应该始终对网络代码进行尝试
/捕获
。有很多可能的错误情况,其中脱机只是其中之一
例如,如果您连接到没有Internet的本地WiFi,IsNetworkAvailable
将返回true
,即使没有Internet访问。查看,IsNetworkAvailable
可以返回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());}
可以为您提供以下方面的输出:
- 网络可用性:正确
- 蜂窝网络已启用:False
- 已启用漫游:False
- 已启用Wi-Fi:错误