Estranheza com acesso à área de transferência

Eu estou tentando escrever um pequeno aplicativo que precisa usar a área de transferência para alguma funcionalidade. Como eu não quero sobrescrever os dados do usuário atualmente na área de transferência, decidi salvá-lo na memória, fazer meu trabalho e depois escrevê-lo de volta. O código abaixo é um aplicativo de console que é um exemplo básico do que estou tentando fazer.

O problema que estou tendo é restaurar o estado. Se eu copiar algo para a área de transferência do Visual Studio antes de executar o aplicativo, haverá um total de seis objetos na área de transferência (vários formatos de seqüência de caracteres e um código de idioma), todos colocados no cache. Uma vez que eu restaurá-los embora apenas a localidade está na área de transferência e aparece cada chamada para SetData () sobrescreve o último. (a propósito, SetDataObject não parece ser o inverso de GetDataObject, então eu não posso simplesmente usar isso)

Alguma idéia de como eu posso armazenar o estado da área de transferência e restaurá-lo mais tarde?

    [STAThread]
    static void Main(string[] args)
    {
        //Store the old clipboard data
        Dictionary<string, object> clipboardCache = new Dictionary<string, object>();

        IDataObject clipboardData = Clipboard.GetDataObject();

        foreach (string format in clipboardData.GetFormats())
        {
            clipboardCache.Add(format, clipboardData.GetData(format));
        }

        Clipboard.SetText("Hello world!");

        string value = Clipboard.GetText();

        Console.WriteLine(value);

        //Clear the clipboard again and restore old data
        Clipboard.Clear();

        foreach (KeyValuePair<string, object> valuePair in clipboardCache)
        {
            Clipboard.SetData(valuePair.Key, valuePair.Value);
            Thread.Sleep(100);
        }

        Console.ReadLine();
    }

questionAnswers(2)

yourAnswerToTheQuestion