/// <summary> /// 开始异步更新持久化数据文件 /// </summary> public void UpdatePersistentFilesAsync(string sourcePath) { if (_deletedcount > 0) { //先删除已经丢弃的文件 foreach (var item in _deletedFiles) { if (File.Exists(PersistentBase + item.FullPath)) { File.Delete(PersistentBase + item.FullPath); } } } if (ModifiedFiles > 0) { foreach (var md5filedata in _latestFiles) { DebugConsole.Info("Begin update [" + md5filedata.FullPath + "] !"); FileReader reader = FileReader.CreateReader(sourcePath, md5filedata.FullPath, FileReader.FileType.REMOTE); reader.OnReadCompleted = (rd) => { FileWriter writer = new PersistentFileWriter(rd.ByteData, PersistentBase + rd.FilePath); writer.OnWriteCompleted = OnWirteComplete; writer.WriteAsync(); }; reader.ReadAsync(); } } else { UpdateCompleted = true; } }
void On_Write_Callback(IAsyncResult iar) { PersistentFileWriter pfw = iar.AsyncState as PersistentFileWriter; try { pfw.WriteStream.EndWrite(iar); if (iar.IsCompleted) { pfw.WriteStream.Flush(); this.OnCompleted(); } } catch (Exception e) { this.OnError(e.Message); } finally { pfw.WriteStream.Close(); pfw.WriteStream.Dispose(); pfw.WriteStream = null; } }