0

WPF デスクトップ アプリケーションの Windows クリップボードにいくつか問題があります。クリップボードのコンテンツを取得し、何かを実行して (このコンテンツに書き込むことなく、読み取りのみ)、コンテンツをクリップボードに再送信しようとしました。実行されますが、コンテンツを再送信した後、クリップボードのコンテンツを取得して再度読み取ろうとすると、OutOfMemory 例外が発生します。

検索後、次のリンクを見つけました: http://www.grumpydev.com/2009/09/05/system-outofmemoryexception-gotcha-using-clipboard-getdata-in-wpf/

シリアル化の問題が原因である可能性があります。データをクリップボードに送信すると、シリアル化属性が失われるか、データが失われると思います。

これが私のコードです:

var data = System.Windows.Clipboard.GetDataObject();
// Read "data"
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetDataObject(data, true);

var dataTwo = System.Windows.Clipboard.GetDataObject();
// Read "dataTwo" ==> OutOfMemoryException

データには私のプロジェクトのタイプがないことに注意してください。それはすべての可能性があります(フォトショップ、エクセル、画像、テキスト、バイナリ...)

誰でもこれを修正する考えがありますか?

よろしくお願いします

4

1 に答える 1

0

dataあなたが言及したリンクとそこにある結論に基づいて、変数の型を としてマークする必要があるように見えます[Serrializable]

ほとんど「すべて」である必要があるため、インターフェイスを使用して試すことができますISerializable

class Foo
{
    private ISerrialisable data;
    ...
}

オブジェクトがシリアル化可能である限り、クリップボードで使用できるはずです。

于 2013-08-09T08:52:11.850 に答える