8

私はこのような方法を持っています:

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

where を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.SetDataObjectを使用する必要があります。copytrue

于 2013-11-05T21:49:52.383 に答える