Eigentlich könnte es ein anderes Problem zur Hand sein. Das Framework Aufruf (sowohl die WPF und winform Aromen), um so etwas wie dieses (Code aus Reflektor):
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);
}
Beachten Sie, dass SetDataObject immer wahr in diesem Fall aufgerufen wird.
Intern löst dies zwei Aufrufe an die Win32 API aus, eine zum Festlegen der Daten und eine zum Löschen der Daten aus Ihrer App, damit sie nach dem Schließen der App verfügbar ist.
Ich habe mehrere Apps gesehen (einige Chrome-Plugins und einen Download-Manager), die das Zwischenablage-Ereignis anhören. Sobald der erste Anruf eintrifft, öffnet die App die Zwischenablage, um in die Daten zu schauen, und der zweite Anruf zum Löschen wird fehlschlagen.
Haben keine gute Lösung gefunden, außer meine eigene Zwischenablage-Klasse zu schreiben, die direkte Win32-API verwendet oder setDataObject direkt mit false aufrufen, um Daten zu speichern, nachdem die App geschlossen wird.
Das ist eine ziemlich kludgey Lösung ist klar - es ist wirklich der einzige Weg? – Blorgbeard
Dies sieht so aus, wie MS es in Forms implementiert hat. Diese Frage war über WPF (obwohl ich nicht wusste, dass es wichtig war). –