积极答复者
点击SecondTile数据没有初始化

问题
-
背景
我建立了一个win8 Grid App 程序,然后在itemdetails页面上实现了一个tile。但是点击tile回来的时候数据总是load不上。
数据源依然是SampleDataSource,但是data的内容我改成从本地读取(工程folder中)。在点击secondtile启动的时候,监视itemdetail中的:
var item = awaitSampleDataSource.GetItem((String)navigationParameter)
public static async Task<SampleDataItem> GetItem(string uniqueId) { // Simple linear search is acceptable for small data sets var matches = _sampleDataSource.AllGroups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId)); if (matches.Count() == 1) return matches.First(); return null; }
发现_SampleDataSource根本没有被初始化,如果我在上面的方法里面加
if(_sampleDataSource == null) _sampleDataSource = newSampleDataSource(); 就会遇到读取文件的问题(正常启动没有问题)
private async void GetLocalFiles() { var Folders = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path).GetResults().GetFoldersAsync(); foreach (var folder in Folders)
上面的的读取文件操作在这种情况下每次都错A method was called at an unexpected time. (Exception from HRESULT: 0x8000000E)
at Windows.Foundation.IAsyncOperation`1.GetResults()
at TravelJourney.Data.SampleDataSource.<GetLocalFiles>d__e.MoveNext() in e:\Win8\TravelJourney\TravelJourney\DataModel\SampleDataSource.cs:line 287
请问1. 有没有好点的解决方案
2. 从tile进入程序,读取文件为什么会有问题?
Hard work, hard play!
答案
-
你看下你的 SampleDataSource.cs 287行,是什么代码?你是怎么读文件的?
首先这一行 存在严重问题:
var Folders = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path).GetResults().GetFoldersAsync();
你应该分步调用,而不是一口气点到低:
var Folders = await (await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path)).GetFoldersAsync();
注意,你不能直接await一个方法就直接在他下面调用子方法。需要括号包一下。或者分两行写。你的写法存在第一次异步调用可能并没有完成就要求去执行第二次,也就是说GetResults 可能并没有结果。
请检查你的代码是否还存在此类问题,然后如果问题还存在,请多贴一点你的读文件的代码。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Jie BaoModerator 2012年9月17日 5:57
- 已建议为答案 Jie BaoModerator 2012年9月24日 10:39
- 已标记为答案 Jie BaoModerator 2012年10月8日 8:37
全部回复
-
你看下你的 SampleDataSource.cs 287行,是什么代码?你是怎么读文件的?
首先这一行 存在严重问题:
var Folders = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path).GetResults().GetFoldersAsync();
你应该分步调用,而不是一口气点到低:
var Folders = await (await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(Path)).GetFoldersAsync();
注意,你不能直接await一个方法就直接在他下面调用子方法。需要括号包一下。或者分两行写。你的写法存在第一次异步调用可能并没有完成就要求去执行第二次,也就是说GetResults 可能并没有结果。
请检查你的代码是否还存在此类问题,然后如果问题还存在,请多贴一点你的读文件的代码。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Jie BaoModerator 2012年9月17日 5:57
- 已建议为答案 Jie BaoModerator 2012年9月24日 10:39
- 已标记为答案 Jie BaoModerator 2012年10月8日 8:37