C# 已关闭Windows通用应用程序的剪贴板内容

C# 已关闭Windows通用应用程序的剪贴板内容,c#,windows-runtime,win-universal-app,windows-10,uwp,C#,Windows Runtime,Win Universal App,Windows 10,Uwp,我编写了一个C#Windows通用应用程序,用户可以在其中将文件复制到剪贴板。但如果应用程序关闭,剪贴板内容就会丢失。如果用户可以如此容易地丢失剪贴板内容,那么可用性是可怕的。有没有办法使应用程序的剪贴板内容像其他经典Windows应用程序一样持久化 示例代码: public static void CopyFileToClipboard(StorageFile file) { DataPackage dp = new DataPackage(); dp.RequestedOpe

我编写了一个C#Windows通用应用程序,用户可以在其中将文件复制到剪贴板。但如果应用程序关闭,剪贴板内容就会丢失。如果用户可以如此容易地丢失剪贴板内容,那么可用性是可怕的。有没有办法使应用程序的剪贴板内容像其他经典Windows应用程序一样持久化

示例代码:

public static void CopyFileToClipboard(StorageFile file) {
    DataPackage dp = new DataPackage();
    dp.RequestedOperation = DataPackageOperation.Copy;
    dp.SetStorageItems(new List<StorageFile>() { file });
    Clipboard.SetContent(dp); // not available after app closed
    Clipboard.Flush();
}

public static void CopyTextToClipboard(string text) {
    DataPackage dp = new DataPackage();
    dp.RequestedOperation = DataPackageOperation.Copy;
    dp.SetText(text); // available after app closed
    Clipboard.SetContent(dp);
    Clipboard.Flush();
}

//I have tried to copy the file to the app folder first but it has nothing changed.
public async static void CacheAndCopyFileToClipboard(StorageFile file) {
    DataPackage dp = new DataPackage();
    dp.RequestedOperation = DataPackageOperation.Copy;
    var xfile = await ApplicationData.Current.LocalFolder.CreateFileAsync(file.Name);
    await file.CopyAndReplaceAsync(xfile);
    dp.SetStorageItems(new List<StorageFile>() { xfile });
    Clipboard.SetContent(dp); // not available after app closed
    Clipboard.Flush();
}
publicstaticvoidcopyfiletoclipboard(存储文件){
DataPackage dp=新的DataPackage();
dp.RequestedOperation=DataPackageOperation.Copy;
dp.SetStorageItems(新列表(){file});
剪贴板.SetContent(dp);//应用程序关闭后不可用
Clipboard.Flush();
}
公共静态无效CopyTextToClipboard(字符串文本){
DataPackage dp=新的DataPackage();
dp.RequestedOperation=DataPackageOperation.Copy;
dp.SetText(text);//应用程序关闭后可用
剪贴板。设置内容(dp);
Clipboard.Flush();
}
//我已尝试先将文件复制到应用程序文件夹,但没有任何更改。
公共异步静态void CacheAndCopyFileToClipboard(存储文件){
DataPackage dp=新的DataPackage();
dp.RequestedOperation=DataPackageOperation.Copy;
var xfile=wait ApplicationData.Current.LocalFolder.CreateFileAsync(file.Name);
wait file.copyandresplaceasync(xfile);
dp.SetStorageItems(新列表(){xfile});
剪贴板.SetContent(dp);//应用程序关闭后不可用
Clipboard.Flush();
}
所以问题是,我如何才能将文件放入剪贴板,这样即使应用程序关闭,用户也可以粘贴它

编辑: 这似乎是所有Windows Universal应用程序的问题,例如,如果在Windows照片应用程序中复制图片,则只能在照片应用程序运行时粘贴图片。我无法想象这种奇怪的行为应该是应用程序的默认行为。它看起来更像一只虫子,因为我看不出这种奇怪行为的原因


Edit2:这个问题的新例子(感谢Joe300的反馈)。它可以处理字符串,但不能处理StorageFile(即使先将其复制到本地应用程序文件夹)。命令不能处理文件的原因是什么?在使用文件(权限,…)时,有什么特别的需要考虑吗?

< p>您需要添加一个调用,以便在应用程序关闭后,内容是可用的。p> 将内容添加到剪贴板并释放数据包对象 从源应用程序。此方法允许保留内容 应用程序关闭后可用

您还应该设置
RequestedOperation

dp.RequestedOperation = DataPackageOperation.Copy;
try
{
    Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(dp);
    Clipboard.Flush();
}
catch (Exception ex)
{
   // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open                  
}

除此之外,实际上没有任何其他操作
剪贴板的选项

如果我关闭应用程序,文件丢失,则无法解决问题。Call Clipboard.Flush()没有改变这一点,尽管该命令的描述看起来是解决方案。可能这是StorageFile对象的一个问题,因为它似乎在处理字符串。如何初始化
StorageFile
?dp.Flush();数据包上不存在,仅在剪贴板上。StorageFile和SetContent不应该是问题所在,因为在应用程序运行时,一切都正常工作,但如果应用程序关闭,剪贴板将丢失内容。刷新和DataPackageOperation.Copy扩展名到我的原始代码并不能解决此问题…如果在应用程序退出后无法访问文件,剪贴板文件操作将无法工作。我在代码中的
Flush
确实是一个打字错误。如何创建和初始化文件?
Clipboard.Flush()需要在剪贴板.SetContent(dp)之后<代码>剪贴板。设置内容(dp);Clipboard.Flush()