Windows Store App對於Folder的監控


Windows Store App對於Folder的監控
   最近在做Windows store app的項目,需要對於picture library這個文件夾做監控,就是在該文件夾中文件變動的時候接受消息並更新程序的顯示。
  這里用到了Windows.Storage.StorageFileQueryResult中的ContentsChanged消息。該消息在 StorageFileQueryResult對應的文件夾發生變動的時候觸發。但是按照MSDN上的定義編寫完后發現總是收不到該消息,經多方survey終於解決,得出如下結論:
   1.  StorageFileQueryResult object必須是類的成員變量或全局變量,這樣就不會被系統釋放。切記不能作為function中的臨時變量。
   2.  在register contentschanged的event handler之前必須至少調用一次 StorageFileQueryResult 的成員變量GetFilesAsync。

  核心代碼實例如下:(Javascript版)
  var g_fileQuery = null; //全局變量
  ....
  var options = new Windows.Storage.Search.QueryOptions();
  ....  // 按照實際需要,設置query options各屬性
  g_fileQuery = Windows.Storage.KnownFolders.createFileQueryWithOptions(options);
  g_fileQuery.getFilesAsync().then(function (files) {   // 必須至少調用一次該API
             g_fileQuery.addEventListener("contentschanged"function () {    // 注冊contentschanged event handler
                  // 處理文件夾內容變動事件
             });
  });

  最后吐槽一下,Microsoft設計的這個坑爹的event太惡心了。
  首先這個event沒有任何參數,所以程序員並不能通過這個event得知文件夾中是增加還是刪除或者更改了文件,變動的文件數量就更不得而知。也就是說收到這個消息后還是要遍歷文件夾來比較。
  其次,MSDN上壓根就沒有說明上述的兩個觸發該event的必要前置條件。導致大量程序員在使用這個event時遇到不能正確觸發的問題。要經過多方詢問才能得知這兩個隱藏條件,而且往往答案都不是在MS的官方網站上查到的。真是諷刺。我想說,MS你這是要學暴雪嗎?做個API也要玩隱藏彩蛋? 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com