私のアプリケーションでは、非常に奇妙なクリップボードの動作に直面しています。 いくつかのファイルを受信し、一時的な場所に保存してクリップボードに保存するTcpサーバーがあります。 は、ここでは、コードの一部です:FileDrop形式の奇数クリップボードの動作
filename = bReader.ReadString();
int dim = bReader.ReadInt32();
byte[] buffer = new byte[dim];
buffer = bReader.ReadBytes(dim);
using (FileStream fs = new FileStream(type, FileMode.OpenOrCreate, FileAccess.Write))
{
fs.Write(buffer, 0, buffer.Length);
fs.Close();
}
String path = Path.GetFullPath(filename);
DataObject data = new DataObject();
data.SetData(DataFormats.FileDrop, true, new String[]{path});
Clipboard.SetDataObject(data, true);
私が受信して保存したファイルを正しく、そしてまた、彼は、クリップボード内のデータをFileDrop置くことができます。 問題は、アプリケーションが閉じられたときにのみファイルを貼り付けることができるということです。それは本当に変だ...
アプリケーションが終了すると、私は問題なく貼り付けることができ、貼り付けられたファイルは完全に正しいです。
提案がありますか?あなたがClipboard.SetDataObject
を呼び出したときに事前に おかげで
ええ、実際に私は問題を解決することができました。上記のコードはクライアントごとに1つずつ異なるスレッドで実行されていました。クリップボードのメソッドは完全にスレッドセーフであると思っていましたが、ドキュメントに記載されていますが、明らかにそうではありません。とにかく、私は上記のコードを1つのスレッドで呼び出すことでこの問題を解決しました。 –
スレッドセーフですが、問題はありません安全です;) –
ええ、そうですねXD –