На самом деле может быть еще одна проблема. Структура вызова (как WPF и WinForm ароматизаторов) на что-то вроде этого (код от рефлектора):
private static void SetDataInternal(string format, object data)
{
bool flag;
if (IsDataFormatAutoConvert(format))
{
flag = true;
}
else
{
flag = false;
}
IDataObject obj2 = new DataObject();
obj2.SetData(format, data, flag);
SetDataObject(obj2, true);
}
Обратите внимание, что SetDataObject всегда вызывается с правдой в этом случае.
Внутренне, что вызывает два вызова win32 api, один для установки данных и один для его очистки от вашего приложения, чтобы он был доступен после закрытия приложения.
Я видел несколько приложений (некоторые хром-плагины и диспетчер загрузки), которые прослушивают событие буфера обмена. Как только первый звонок ударит, приложение откроет буфер обмена, чтобы просмотреть данные, а второй вызов флеша не удастся.
Не нашли подходящего решения, кроме как написать собственный класс буфера обмена, который использует прямой API win32 или для вызова setDataObject напрямую с помощью false для хранения данных после закрытия приложения.
Это довольно kludgey решение - это действительно единственный способ? – Blorgbeard 2008-09-16 02:07:20
Это похоже на то, как MS реализовала его в Формах. Этот вопрос касался WPF (хотя я не понимал, что это важно). – 2010-01-18 08:22:03