目前我正在开发Windows手机应用程序,是的,这是我的第一个Windows应用程序。现在我正面临一个问题,不知道我犯了什么愚蠢的错误。是的,我当然已经完成了调试。
现在,我究竟在做什么?
问题:
如果我从2页移到第3页并再次回到第2页,它再次进行网络电话。即在下面的代码中再次拨打DownloadStringAsync
。
即。如果第二页有ListBox有5个数据,现在点击特定项目我移动到第3页,如果我从第3页回到第2页,项目加倍,即10项(仅因为它再次打电话)
以下是参考的可能代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
type = Convert.ToInt32(NavigationContext.QueryString["Type"]);
if (type != 0)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL));
}
else
{
MessageBox.Show("Please check internet connection!!");
}
}
}
答案 0 :(得分:5)
您是否可以使用以下代码测试用户是否使用了后退按钮?
e.NavigationMode == System.Windows.Navigation.NavigationMode.Back
答案 1 :(得分:0)
有时这种方法(QueryString)会产生问题。
在后面的事件中,它会产生问题 它更好地将id(参数)存储在isolatedstorage应用程序密钥
中IsolatedStorageSettings.ApplicationSettings [“id”] =“您的数据”;
答案 2 :(得分:0)
OnNavigatedTo
。这就是为什么当你从第3页导航回第2页时它会被重新触发。
您可以通过仅在前向导航上触发网络呼叫来避免此问题。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (this.isInitialized) return;
type = Convert.ToInt32(NavigationContext.QueryString["Type"]);
if (type != 0)
{
if (NetworkInterface.GetIsNetworkAvailable())
{
client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL));
}
else
{
MessageBox.Show("Please check internet connection!!");
}
}
this.isInitialized = true;
}
请注意NetworkInterface.GetIsNetworkAvailable
可以在某些情况下长时间阻止(在本例中为UI线程),要解决此问题,您可以使用network detection events。