当这两个方法的代码看,我看到如下区别:
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