दरअसल हाथ में एक और मुद्दा हो सकता है। ढांचा कॉल करें (दोनों 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 एपीआई में दो कॉल ट्रिगर करता है, एक डेटा सेट करने के लिए और इसे अपने ऐप से फ़्लश करने के लिए, ताकि ऐप बंद होने के बाद यह उपलब्ध हो।
मैंने क्लिपबोर्ड ईवेंट को सुनने वाले कई ऐप्स (कुछ क्रोम प्लगइन और एक डाउनलोड मैनेजर) को देखा है। जैसे ही पहली कॉल हिट हो जाती है, ऐप डेटा देखने के लिए क्लिपबोर्ड खोल देगा, और फ्लश करने वाला दूसरा कॉल विफल हो जाएगा।
मेरे स्वयं के क्लिपबोर्ड क्लास को लिखने के अलावा एक अच्छा समाधान नहीं मिला है जो सीधे Win32 API का उपयोग करता है या ऐप बंद होने के बाद डेटा रखने के लिए सीधे सेटडेटा ऑब्जेक्ट को कॉल करने के लिए कॉल करता है।
स्रोत
2012-07-30 16:57:43
एक बहुत kludgey समाधान है कि स्पष्ट करने के लिए कर रहा है - यह वास्तव में एक ही रास्ता है? – Blorgbeard
ऐसा लगता है कि एमएस ने फॉर्म में इसे लागू किया था। यह सवाल डब्ल्यूपीएफ के बारे में था (हालांकि मुझे इसका एहसास नहीं हुआ था)। –