Exemplo n.º 1
0
        public override void TransferFile(object o, string filename)
        {
            int retryes = 10;

            lock (Locker)
            {
                _timer.Stop();
                MTPDataResponse result = new MTPDataResponse();
                //=================== managed file write
                do
                {
                    try
                    {
                        result = StillImageDevice.ExecuteReadBigData(CONST_CMD_GetObject,
                                                                     Convert.ToInt32(o), -1,
                                                                     (total, current) =>
                        {
                            double i         = (double)current / total;
                            TransferProgress =
                                Convert.ToUInt32(i * 100);
                        });
                    }
                    // if not enough memory for transfer catch it and wait and try again
                    catch (OutOfMemoryException)
                    {
                    }
                    catch (COMException)
                    {
                    }
                    if (result != null && result.Data != null)
                    {
                        BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create));
                        writer.Write(result.Data);
                        writer.Flush();
                        writer.Close();
                    }
                    else
                    {
                        Log.Error("Transfer error code retrying " + result.ErrorCode.ToString("X"));
                        Thread.Sleep(200);
                        retryes--;
                    }
                } while (result.Data == null && retryes > 0);
                //==================================================================
                //=================== direct file write
                //StillImageDevice.ExecuteReadBigDataWriteToFile(CONST_CMD_GetObject,
                //                                                     Convert.ToInt32(o), -1,
                //                                                     (total, current) =>
                //                                                     {
                //                                                       double i = (double)current / total;
                //                                                       TransferProgress =
                //                                                         Convert.ToUInt32(i * 100);

                //                                                     }, filename);

                //==================================================================
                _timer.Start();
                TransferProgress = 0;
            }
        }