當這兩個方法的代碼看,我看到如下區別:
public static void SetText(string text, TextDataFormat format)
{
if (text == null)
{
throw new ArgumentNullException("text");
}
if (!DataFormats.IsValidTextDataFormat(format))
{
throw new InvalidEnumArgumentException("format", (int)format, typeof(TextDataFormat));
}
Clipboard.SetDataInternal(DataFormats.ConvertToDataFormats(format), text);
}
[SecurityCritical]
public static void SetDataObject(object data, bool copy)
{
SecurityHelper.DemandAllClipboardPermission();
Clipboard.CriticalSetDataObject(data, copy);
}
的SetDataObject
方法被標記爲安全關鍵,這似乎是重要的區別。但是,SetText
方法最終只是在內部調用SetDataObject
。區別在於:
/* From SetText: */
Clipboard.SetDataObject(dataObject, true);
/* From SetDataObject: */
Clipboard.SetDataObject(data, false);
SetText(text)
不會清除剪貼板應用程序退出時,同時SetDataObject(object)
總是這樣。這是通話之間唯一真正的區別。嘗試撥打SetDataObject(someString, false)
和SetDataObject(SomeString, true)
以查看任何區別。如果兩者表現相同,則差異必須位於其他地方。
謝謝你的努力。我想我需要閱讀調用背後的Win32 API,才能真正理解正在發生的事情。 – RedX