在我的情况恼人的异常处理我通过递归预加载的文件名,然后在搜索中的StringList解决的问题:
private static List<string> mContentFilenames = new List<string>();
private static void preloadContentFilenamesRecursive(StorageFolder sf)
{
var files = sf.GetFilesAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
if (files != null)
{
foreach (var f in files)
{
mContentFilenames.Add(f.Path.Replace('\\','/'));
}
}
var folders = sf.GetFoldersAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
if (folders != null)
{
foreach (var f in folders)
{
preloadContentFilenamesRecursive(f);
}
}
}
private static void preloadContentFilenames()
{
if (mContentFilenames.Count > 0)
return;
var installed_loc = Windows.ApplicationModel.Package.Current.InstalledLocation;
var content_folder = installed_loc.GetFolderAsync("Content").AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
if (content_folder != null)
preloadContentFilenamesRecursive(content_folder);
}
private static bool searchContentFilename(string name)
{
var v = from val in mContentFilenames where val.EndsWith(name.Replace('\\', '/')) select val;
return v.Any();
}
更新
但只有当调试器使用此代码附加。我低估了微软的工作人员 - 他们很乐意将你的调试转到地狱。他们蹩脚的错误处理和isFileExist函数的缺乏使得您可以递归检查文件来实现isFileExist,而无需例外,但是 - 溢出 - 如果没有附加调试器,则此代码会使应用程序在没有任何异常情况下静默地退出。在应用程序崩溃之前,它会检查随机数量的文件,所以问题不在于特别的方法 - 它只是“无法检查许多文件”,有多少 - 随时间变化。
考虑到在实际的WP8.1设备上启动任何(小型或大型)应用程序的50%的情况下VS崩溃,以及无法访问设备文件系统的事实,想象如何很难找到崩溃的根源。我花了差不多一天的时间!
顺便说一句,毕竟那些二十年来与Windows,Windows商店和Windows手机应用程序的工作,我真的很想见面从MSFT的人只是看在眼里。要看看它是什么 - 愚蠢或虐待?他们真的讨厌我们吗,开发者?为什么?