Нечетное поведение буфера обмена в формате FileDrop - PullRequest
0 голосов
/ 27 июля 2011

Я сталкиваюсь с очень странным поведением буфера обмена в моем приложении.У меня есть Tcp-сервер, который получает некоторые файлы, сохраняет их во временные местоположения и помещает их в буфер обмена.Вот часть кода:

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 в буфер обмена.Проблема в том, что я могу вставить файл, только когда мое приложение закрыто.Это действительно странно ...

После закрытия приложения я могу вставлять без проблем, и вставленный файл полностью корректен.

Есть предложения?Заранее спасибо

1 Ответ

1 голос
/ 27 июля 2011

Это Может произойти. Буфер обмена является общим системным ресурсом, когда вы вызываете Clipboard.SetDataObject, он вызывает функцию user32 API OpenClipboard, проблема здесь может быть в том, что ваша программа открывает его так, что другие приложение не может использовать его, пока ваше приложение еще работает. это также может быть проблемой, если вы используете собственные метафайлы, отметьте this . В любом случае я запускаю этот код «Я использую 4.0, если это имеет значение»:

DataObject data = new DataObject();
data.SetData(DataFormats.FileDrop, true, new String[] { @"C:\test.txt" });
Clipboard.SetDataObject(data, true);

Но мне не удалось рассмотреть проблему, которую вы описали, окна могут видеть операцию копирования во время работы программы и после ее закрытия. У вас есть доступ только к Clipboard из этого кода? Как вы читаете данные обратно "вставка в форму"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...