none
실시간 데이터써비스 가능한가요? RRS feed

  • 질문

  • 현재 ContosoCookbook 소스를 공부하고 있습니다

    ContosoCookbook 데이터중에 Recipes.txt 내용이 변경되었을때 화면 클릭없이 자동으로 내용이 변경되게 하려고 하고 있습니다

    여러가지 시도중에 GroupedItemPage.xaml.cs 의 LoadState 를 일정시간에 한번씩 로드 시켜서 Recipes.txt 의 내용을 다시겨져오게 되면

    새로운 데이터로 갱신되지 않을까 해서 입니다.

    이러한 시도가 맞는지 맞다면 어떻게 해야하는지 팁을 알려주시면 열심히 공부해보겠습니다.

    감사합니다

    2013년 5월 10일 금요일 오전 10:59

모든 응답

  • 주기적으로 파일의 내용을 가져오는 것도 하나의 방법이기는 하지만 효과적인 방법은 아닐 수도 있습니다.

    제약이 다소 있습니다만 StorageFolderQueryResult.ContentsChanged 이벤트를 사용할 수 있습니다.

    이 이벤트는 해당 폴더에서 파일이 추가/삭제 되거나 또는 파일이 변경될 때 발생하는 이벤트로써 다음 사항을 유념하여 사용해야 합니다.

    1. 이벤트를 사용하기 전에 일단 GetFilesAsync 메서드가 한번은 호출이 되어야합니다.

    2. 일반적으로는 하위 폴더의 내용까지 감지하지 않으므로 Recipes.txt가 하위 폴더에 있을 경우 QueryOptions에서 하위 폴더까지 지정해주어야 합니다.

    3. 이벤트의 원래 목적상 Recipes.txt 변경만 체크하는 것으로 계산할 때보다 좀 더 자주 발생할 수 있습니다. 고로 2번을 굳이 적용하지 않고 범위를 한정할 수 있게끔 대상 파일을 루트에만 두는 것도 하나의 방법이겠습니다. 하지만 이것은 질문하신 분의 선택에 달렸습니다.

    4. 당연하겠지만, 앱이 suspended 상태일 때는 이벤트가 수신되지 않습니다.

    이를 코드로 간단하게 표현 해보면 다음과 같습니다.

    var options = new Windows.Storage.Search.QueryOptions
    {
        FileTypeFilter = { ".txt" },
        FolderDepth = Windows.Storage.Search.FolderDepth.Deep // 하위폴더까지 확인할 경우
    };
    
    var query = KnownFolders.DocumentsLibrary.CreateFileQueryWithOptions(options);
    query.ContentsChanged += QueryContentsChanged;
    var files = await query.GetFilesAsync();
    
    ...

    2013년 5월 13일 월요일 오전 2:54
  • 어떤 방식으로든 실시간으로 가져오는건 가능합니다.

    Recipes를 웹에 그대로 올리시고 일정시간으로 데이터를 불러오셔도 되구요.


    SmartShare

    2013년 7월 9일 화요일 오후 2:20