8

我有这样的方法:

public DataObject GetClipboardData()
{
    var result = new DataObject();
    result.SetText(this.fallbackText.ToString());
    result.SetData(DataFormats.Html, this.GenerateHtml(), false);
    return result;
}

哪里GenerateHtml返回一个MemoryStream

我需要担心关闭MemoryStream对象吗?或者我应该使用其他类型的对象将原始字节放在剪贴板上吗?

(我试过byte[],但这会将文本"System.Byte[]"或类似内容放在剪贴板上)

4

1 回答 1

1

我认为如果一个对象实现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();
    }
}

所以你的方法可以改变:

public HtmlDataObject GetClipboardData()
{
    return new HtmlDataObject(this.GenerateHtml(), this.fallbackText.ToString());
}

当你用完它时,你可以把它放入一个using statement或它中。Dispose()

最后的想法:你不应该担心剪贴板数据,因为DataObject当你退出应用程序时无论如何都会被销毁,你的剪贴板会丢失你放入其中的内容。 http://msdn.microsoft.com/en-us/library/office/gg278673.aspx

如果您希望流在处理后和/或应用程序退出时保持不变,您必须使用带有参数 =的Clipboard.SetDataObjectcopytrue

于 2013-11-05T21:49:52.383 回答