none
点击SecondTile数据没有初始化 RRS feed

  • 问题

  • 背景

    我建立了一个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!

    2012年9月14日 12:14

答案

  • 你看下你的 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



    2012年9月17日 5:55
    版主

全部回复

  • 有人知道嘛?

    Hard work, hard play!

    2012年9月14日 14:01
  • 试了很长时间,发现应该是读本地文件的问题,那么对于win8的文件读取有哪些要注意的地方?

    例如:

    1。启动程序,建立senondtile,ALT+F4关闭APP,在点击tile肯定会抱错,在一个不期望的时间读取文件。

    2。关闭vs调试,点击tile,alt+f4关闭,多重复几次,也会出现错误,但是由于没有attach debugger,只能看见程序被意外终止,但是同样应该是读取文件的问题。


    Hard work, hard play!

    2012年9月16日 6:38
  • 你看下你的 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



    2012年9月17日 5:55
    版主