WPD MTP流在提交时挂起

时间:2015-01-25 13:28:36

标签: c# com mtp wpd

我使用以下代码使用Windows Portable Device API将FileInfo对象包装的文件复制到MTP设备:

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文件的几个kiB,行

targetStream.Commit(0);

需要很长时间才能执行。在编写几个MiB的文件时,没有错。 我想知道为什么会这样,以及我如何解决这个问题。谢谢!

0 个答案:

没有答案