WPD MTP поток зависает при коммите

Я использую следующий код для копирования файла, обернутого объектом FileInfo, на устройство MTP с помощью API переносимого устройства Windows:

public static void CopyFileToDevice(PortableDeviceFolder parent, string name, FileInfo file)
    {
        IPortableDeviceValues values = GetRequiredPropertiesForContentType(parent.Id, name, file.Length);

        PortableDeviceApiLib.IStream tempStream;
        uint blockSize = 0;
        parent.Device.Content.CreateObjectWithPropertiesAndData(
            values,
            out tempStream,
            ref blockSize,
            null);

        System.Runtime.InteropServices.ComTypes.IStream targetStream =
            (System.Runtime.InteropServices.ComTypes.IStream)tempStream;
        try
        {
            using (var sourceStream = file.OpenRead())
            {
                var buffer = new byte[blockSize];
                int bytesRead;
                do
                {
                    bytesRead = sourceStream.Read(buffer, 0, (int)blockSize);
                    targetStream.Write(buffer, bytesRead, IntPtr.Zero);
                } while (bytesRead > 0);
            }

            targetStream.Commit(0);
        }
        finally
        {
            Marshal.ReleaseComObject(tempStream);
        }
        parent.Refresh();
    }

Теперь это работает довольно хорошо, однако при записи небольшого файла, в данном случае только текстовый файл .m3u из пары килобайт, строка

targetStream.Commit(0);

занимает очень много времени, чтобы выполнить. При записи файла в несколько миб нет ничего плохого. Я хотел бы знать, почему это происходит и как я мог бы это исправить. Спасибо!

Ответы на вопрос(0)

Ваш ответ на вопрос