如何在 c# 中将多个项目复制到剪贴板历史记录?

问题描述

我正在使用 Win API (Windows.ApplicationModel.DataTransfer.Clipboard) 中的剪贴板类。当我尝试将多个项目一个一个地复制到剪贴板历史记录时,它会被最近的项目覆盖。我想将我复制的每个项目存储到剪贴板历史记录中。我的剪贴板历史记录已启用,我尝试使用剪贴板中的所有设置方法包括 (SetText) 中的 System.Windows.Clipboard 方法,并且所有这些方法都会覆盖而不是添加到历史记录中。

    private void UpdateClipboardOnProfileDropDownClosed(object sender,EventArgs e)
    {
        Clipboard.ClearHistory();
        using (var db = new LiteDatabase(Path.Combine(documents,"Auto Paste Clipboard","data.db")))
        {
            var collection = db.GetCollection<ClipboardProfile>("clipboard");

            var clipboard = collection.FindOne(x => x.Profile == ProfileComboBox.Text);

            clipboard.Clipboard.Reverse();

            MessageBox.Show(clipboard.Clipboard.Count.ToString());
            foreach (var item in clipboard.Clipboard)
            {
                DataPackage data = new DataPackage
                {
                    RequestedOperation = DataPackageOperation.copy
                };

                data.SetText(item);                          
                Clipboard.SetContent(data);
            }                                
        }
    }

解决方法

剪贴板历史保存当前项目需要一些延迟。因此,您可以尝试在添加项目时添加延迟。

请检查以下代码作为示例:

private async void Button_Click(object sender,Windows.UI.Xaml.RoutedEventArgs e)
{
    if(Clipboard.IsHistoryEnabled())
    {
        List<string> lists=new List<string>{ "1","2","3","4","5","6","7","8","9","10"}; 
        foreach(var item in lists)
        {
            DataPackage dataPackage = new DataPackage();
            dataPackage.SetText(item);
            Clipboard.SetContent(dataPackage);
            await Task.Delay(250);
        }
    }
}

注意,如果这些项目没有全部添加,您可以增加延迟时间。