【发布时间】:2013-03-15 19:26:08
【问题描述】:
我想在我的 WinRT C# Metro 应用程序 (Windows Release Preview) 中实现共享源合同。我的应用程序正在存储任意文件。不在文件系统中,而是我通过 WCF 服务以byte[] 获取数据。现在我想在我的应用程序中分享这样的“文件”。
我看到的标准数据格式的唯一可能性是在DataPackage 上使用SetStorageItems() 方法。因此,我面临着将数据从我的字节数组转换为可以共享的StorageFile 的挑战。找到了StorageFile.CreateStreamedFileAsync()方法,想这样用:
// filename: string
// fileContent: byte[]
// ... setting DataPackage title and description ...
DataRequestDeferral deferral = args.Request.GetDeferral();
var file = await Windows.Storage.StorageFile.CreateStreamedFileAsync(filename,
async stream => await stream.WriteAsync(fileContent.AsBuffer()), null);
args.Request.Data.SetStorageItems(new List<IStorageItem> { file });
deferral.Complete();
它编译得很好,但它没有按预期工作。我已经尝试使用标准邮件应用程序进行共享。邮件共享视图打开,我可以创建新邮件。该文件显示为没有缩略图(如预期的那样),但无法发送电子邮件。它显示发送进度几分钟,然后出现错误:“无法与邮件共享 {filename}。”。分享魅力显示“出了点问题”和“[...] 邮件现在无法分享。请稍后再试。”。
当我从文件系统加载StorageFile 时,它运行良好:邮件打开并在几秒钟内发送,这里没有问题。所以要么我使用CreateStreamedFileAsync() 错误,要么这个方法有错误,你怎么看?
【问题讨论】:
标签: windows-8 microsoft-metro windows-runtime sharing