Bil*_*eal 8 c# wpf clipboard memorystream
我有这样的方法:
public DataObject GetClipboardData()
{
var result = new DataObject();
result.SetText(this.fallbackText.ToString());
result.SetData(DataFormats.Html, this.GenerateHtml(), false);
return result;
}
Run Code Online (Sandbox Code Playgroud)
哪里GenerateHtml返回一个MemoryStream.
我是否需要担心关闭MemoryStream物体?或者我应该使用其他类型的对象将原始字节放在剪贴板上?
(我试过,byte[]但这会将文字"System.Byte[]"或类似文字放在剪贴板上)
我认为,如果一个对象实现了,那么IDisposable当您不再需要它时将其丢弃是一件好事。
DataObject提供了该接口的基本实现IDataObject,那么为什么不从它派生:
public sealed class HtmlDataObject : DataObject, IDisposable
{
protected MemoryStream HtmlMemoryStream { get; set; }
public HtmlDataObject(MemoryStream memoryStream, string fallBackText)
{
HtmlMemoryStream = memoryStream;
SetText(fallBackText);
SetData(DataFormats.Html, false, HtmlMemoryStream );
}
public void Dispose()
{
HtmlMemoryStream .Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
所以你的方法可以改变:
public HtmlDataObject GetClipboardData()
{
return new HtmlDataObject(this.GenerateHtml(), this.fallbackText.ToString());
}
Run Code Online (Sandbox Code Playgroud)
当你使用完它后,你可以将它放入using statementor it 中。Dispose()
最后的想法:您不应该担心剪贴板数据,因为DataObject当您退出应用程序时,无论如何它们都会被破坏,并且您的剪贴板将丢失您放入其中的内容。
http://msdn.microsoft.com/en-us/library/office/gg278673.aspx
如果您希望在处理流后和/或应用程序退出时保留该流,则必须使用带有参数 =的Clipboard.SetDataObjectcopytrue