我想在我的 WinRT C# Metro 应用程序(Windows Release Preview)中实现共享源合同。我的应用程序正在存储任意文件。不在文件系统中,而是我通过 WCF 服务将数据作为byte[]
. 现在我想在我的应用程序中分享这样的“文件”。
我看到的标准数据格式的唯一可能性是SetStorageItems()
使用DataPackage
. 因此,我面临着将数据从我的字节数组转换为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()
错了,要么这个方法有一个错误,你怎么看?