Thực tế có thể có một vấn đề khác trong tầm tay. Cuộc gọi khuôn khổ (cả WPF và hương vị Winform) để một cái gì đó như thế này (mã là từ phản xạ):
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);
}
Lưu ý rằng SetDataObject luôn được gọi với đúng trong trường hợp này.
Nội bộ kích hoạt hai cuộc gọi tới win32 api, một để đặt dữ liệu và một để xóa dữ liệu khỏi ứng dụng của bạn để ứng dụng có sẵn sau khi ứng dụng đóng.
Tôi đã xem một số ứng dụng (một số plugin chrome và trình quản lý tải xuống) nghe sự kiện trong khay nhớ tạm. Ngay sau lần truy cập cuộc gọi đầu tiên, ứng dụng sẽ mở khay nhớ tạm để xem dữ liệu và cuộc gọi thứ hai để tuôn ra sẽ không thành công.
Không tìm thấy giải pháp tốt ngoại trừ viết lớp clipboard của riêng tôi sử dụng API win32 trực tiếp hoặc gọi trực tiếp setDataObject bằng false để giữ dữ liệu sau khi ứng dụng đóng.
Nguồn
2012-07-30 16:57:43
Đó là một giải pháp khá kludgey - là nó thực sự là cách duy nhất? – Blorgbeard
Đây có vẻ là cách MS triển khai nó trong Biểu mẫu. Câu hỏi này là về WPF (mặc dù tôi đã không nhận ra nó quan trọng). –