以下代码抛出异常......
private void EnsureDiskSpace()
{
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForSite())
{
const long NEEDED = 1024 * 1024 * 100;
if (file.AvailableFreeSpace < NEEDED)
{
if (!file.IncreaseQuotaTo(NEEDED))
{
throw new Exception();
}
}
}
}
但是这段代码没有(它显示了silverlight“增加配额”对话框)......
private void EnsureDiskSpace()
{
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForSite())
{
const long NEEDED = 1024 * 1024 * 100;
if (file.Quota < NEEDED)
{
if (!file.IncreaseQuotaTo(NEEDED))
{
throw new Exception();
}
}
}
}
代码中唯一的区别是第一个检查file.AvailableFreeSpace,第二个检查file.Quota。
在请求更多内容之前,您是否被允许检查可用空间?看起来我在网上看到了一些先测试可用空间的例子。 SL3中不再支持此功能吗?我的应用程序允许用户从服务器下载文件并在本地存储它们。每当用户用完sapce时,我真的想将配额增加10%。这可能吗?
答案 0 :(得分:4)
我有同样的问题。我的解决方案是在帮助文件中编写的内容。必须从用户交互(例如按钮单击事件)启动磁盘配额的增加。我正在请求从异步WCF调用增加磁盘配额。通过将空间增加请求移动到按钮,单击已运行的代码。
在我的情况下,如果WCF检测到没有足够的空间,则silverlight应用程序通知用户他们需要通过单击按钮来增加空间。当单击按钮,并且空间增加时,我再次调用WCF服务,因为我知道现在有更多空间。没有那么好的用户体验,但它让我超越了这个问题。
答案 1 :(得分:1)
你的第一个例子中有一个微妙的错误。
可能没有足够的可用空间来添加新存储空间,从而触发请求 - 但您要求的金额可能低于现有配额。这会抛出异常并且不显示对话框。
正确的行是
file.IncreaseQuotaTo(file.Quota + NEEDED);
答案 2 :(得分:0)
我相信Silverlight 3中的行为有一些变化,但没有直接使用这些功能,我不完全确定。
我确实看过这个MSDN page on the feature,推荐的方法绝对是你的第一个例子;他们建议:
这并不理想,因为您无法实现自己的增长算法(增长10%等),但您应该能够使用AvailableFreeSpace属性至少取消阻止您的场景,就像您说的那样。 / p>
我认为向用户商店读取可用总空间量(配额)在理论上可能是一个问题,想象一个“流氓”控件或应用程序,它只想填充它在隔离存储空间中的每个最后一个字节,即使不可用,也会迫使用户最终请求更多空间。
答案 3 :(得分:0)
事实证明两个代码块都有效...除非你设置一个断点。就此而言,如果设置了断点,则两个代码块都会失败。