public override void Execute(Mirror mirror, IAsyncProgress asyn) { try { Source = mirror; TotalSize = Source.Block.Size; MirrorAsyn = asyn; MirrorAsyn.Start(TotalSize); var device = Source.Source as Device; var service = X86DLLClientSingle.Instance.AndroidMirrorAPIChannel; var openHandle = service.AndroidMirror_OpenDevice(device.ID); if (0 == openHandle) { LoggerManagerSingle.Instance.Error(string.Format("安卓手机镜像出错!OpenDevice失败,设备ID:{0}", device.ID)); MirrorAsyn.IsSuccess = false; MirrorAsyn.Stop(); return; } var result = service.AndroidMirror_Initialize(openHandle, 61440, 0); if (0 != result) { LoggerManagerSingle.Instance.Error(string.Format("安卓手机镜像出错!Initialize失败,设备ID:{0} 错误码:{1}", device.ID, result)); MirrorAsyn.IsSuccess = false; MirrorAsyn.Stop(); return; } CurSchedule = 0; IsStop = false; Source.Local = FileHelper.ConnectPath(Source.Target, Source.TargetFile); FileHelper.CreateFileDirectory(Source.Local); MirrorStream = new FileStream(Source.Local, FileMode.Create); X86DLLClientSingle.Instance.ClientCallback._ImageDataCallBack += ImageDataCallBack; result = service.AndroidMirror_ImageDataZone(openHandle, Source.Block.Block, 0, -1); if (0 != result) { LoggerManagerSingle.Instance.Error(string.Format("安卓手机镜像出错!ImageDataZone失败,设备ID:{0} 错误码:{1}", device.ID, result)); MirrorAsyn.IsSuccess = false; MirrorAsyn.Stop(); return; } } catch (Exception ex) { LoggerManagerSingle.Instance.Error("安卓手机镜像出错!", ex); MirrorAsyn.IsSuccess = false; MirrorAsyn.Stop(); } finally { X86DLLClientSingle.Instance.ClientCallback._ImageDataCallBack -= ImageDataCallBack; MirrorStream?.Flush(); MirrorStream?.Close(); MirrorStream = null; MirrorAsyn = null; } }