PortableDeviceApiLib показать прогресс TransferContentToDevice () - PullRequest
0 голосов
/ 06 февраля 2020

Я использую 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);
            }
        }

1 Ответ

0 голосов
/ 07 февраля 2020

Исходя из моего поиска, кажется, что мы не можем найти способ показать прогресс.

Поскольку мы не выполняем перенос PortableDevice, как мы не знаем его скорость передачи,

и максимум и минимум.

Вы можете посмотреть Копирование файла с индикатором выполнения , чтобы узнать, как установить индикатор выполнения при копировании файла.

...