私の WPF アプリケーションは、クリップボード上のデータをチェックして、データを処理できるかどうかを確認します。データに基づいて (ICommand
実装を介して) いくつかのボタンを有効/無効に設定したため、このコードは頻繁に呼び出されます。
アプリケーションがデータを処理できるかどうかを判断する作業は、時には簡単ではなく、アプリケーションがランダムに「ハング」する原因になります。WPF ランタイムは迅速な応答を期待しているため、この作業を別のスレッドにプッシュできるとは思えません。
この問題を解決するために、IDataObject
s (クリップボードからの現在のものと前回の試行でキャッシュされたもの) を比較することを考えました。単純な比較 (そして、でもobject.ReferenceEquals
目的の結果が返されないので、私はそうすると思いましたメソッドを試してみてくださいClipboard.IsCurrent
. 説明はまさに私が望むもののように聞こえますが、次のことを評価すると:
Clipboard.IsCurrent(Clipboard.GetDataObject())
結果はfalse
です。現在の回避策は、IDataObject のデータ形式を比較することですが、私のアプリケーションはファイル システムの一部のファイルを処理できますが、すべてのファイルを処理できるわけではないため、これは良い答えではありません。そのため、形式が同じであっても、アプリケーションがデータを処理できるかどうかの結果は常に同じであるとは限りません。