【问题标题】:PortableDeviceApiLib show progress TransferContentToDevice()PortableDeviceApiLib 显示进度 TransferContentToDevice()
【发布时间】:2020-05-22 17:25:03
【问题描述】:

我正在使用https://www.nuget.org/packages/PortableDevices/ 将文件复制到 WPD。

我可以使用TransferContentToDevice(___,___) 函数复制文件。

现在,它没有显示任何进度对话框。如何显示传输进度?

我的代码

            //Connect to MTP devices and pick up the first one
            var devices = new PortableDeviceCollection();
            devices.Refresh();

            if (devices.Count > 0)
            {
                device = devices.First();
                device.Connect();

                string rootId = device.GetRootId();
                device.TransferContentToDevice(@"C:\\test\testFile.mp4", rootId);

                //Close the connection
                device.Disconnect();
            }
            else {
                Console.WriteLine("No device connectd");
            }

TransferContentToDevice() 函数 - 来自便携式设备 API

public void TransferContentToDevice(string fileName, string parentObjectId)
        {
            IPortableDeviceContent content;
            PortableDeviceClass.Content(out content);

            var values = GetRequiredPropertiesForContentType(fileName, parentObjectId);

            uint optimalTransferSizeBytes = 0;
            content.CreateObjectWithPropertiesAndData(values, out PortableDeviceApiLib.IStream tempStream, ref optimalTransferSizeBytes, null);

            var targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;

            try
            {
                using (var sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    var buffer = new byte[optimalTransferSizeBytes];
                    int bytesRead;
                    do
                    {
                        bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes);
                        var pcbWritten = IntPtr.Zero;
                        targetStream.Write(buffer, bytesRead, pcbWritten);
                    } while (bytesRead > 0);
                }
                targetStream.Commit(0);
            }
            finally
            {
                Marshal.ReleaseComObject(tempStream);
            }
        }

【问题讨论】:

    标签: c# visual-studio winforms wpd


    【解决方案1】:

    根据我的搜索,似乎我们可能找不到显示进度的方法。

    因为我们不知道PortableDevice是如何传输的,就像我们不知道它的传输率一样,

    以及最大值和最小值。

    你可以看看 File Copy with Progress Bar知道复制文件时如何设置进度条。

    【讨论】:

    • 其实我有TransferContentToDevice()功能码。请参阅我编辑的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2014-05-25
    • 2014-03-10
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多