Progress
Progress
本指南展示了如何跟踪长时间运行的文档加载和保存操作的进度。
长时间运行的加载和保存操作可以通过一对小回调报告增量进度:加载使用 IDocumentLoadingCallback,保存使用 IDocumentSavingCallback。两个接口遵循相同的结构——一个由 Aspose.Words FOSS 为 .NET 在操作进行时调用的单一 Notify(args) 方法。
监控文档加载
在加载文档之前,实现 IDocumentLoadingCallback 并将实现分配给 LoadOptions.ProgressCallback。在加载过程中,会调用 Notify(args),并传入一个 DocumentLoadingArgs 实例,其 EstimatedProgress 属性(一个 double)报告加载的进度程度。
监控文档保存
在调用 Document.Save(fileName, saveOptions)(或其流重载)之前,实现 IDocumentSavingCallback 并将其分配给 SaveOptions.ProgressCallback。在保存过程中,Notify(args) 接收一个 DocumentSavingArgs 实例,该实例同样将 EstimatedProgress 公开为 double。
提示与最佳实践
DocumentLoadingArgs和DocumentSavingArgs是密封类,它们唯一的成员是EstimatedProgress—— 将进度报告视为用于 UI 反馈的轻量级百分比式信号,而不是详细的操作日志。- 在将
ProgressCallback传递给Document(fileName, loadOptions)或Document.Save(fileName, saveOptions)之前,先在LoadOptions或SaveOptions实例上设置它 —— 事后再赋值对已经进行中的操作没有任何影响。 - 对加载和保存使用不同的回调实现;
IDocumentLoadingCallback和IDocumentSavingCallback是不同的接口,尽管它们都只公开一个Notify(args)方法。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
Notify(args) 从未被调用 | ProgressCallback 未在传递给 load 或 save 调用的 LoadOptions/SaveOptions 实例上设置 | 在调用 Document(fileName, loadOptions) 或 Document.Save(fileName, saveOptions) 之前分配 ProgressCallback |
| 进度回调使用了错误的参数类型进行编译 | IDocumentLoadingCallback.Notify 接受 DocumentLoadingArgs;IDocumentSavingCallback.Notify 接受 DocumentSavingArgs — 它们不可互换 | 实现匹配操作(加载 vs. 保存)的接口 |
FAQ
EstimatedProgress 代表什么?
它是一个 double 属性,位于 DocumentLoadingArgs(加载时)或 DocumentSavingArgs(保存时),用于报告操作的预计完成进度。
我可以在进度回调中取消加载或保存操作吗?
Notify(args) 在两个接口上仅接受参数对象(DocumentLoadingArgs 或 DocumentSavingArgs);在此 API 表面上都未公开取消标志。
我需要为加载和保存分别创建不同的回调类吗?
由于它们是不同的接口,你需要分别实现 IDocumentLoadingCallback 和 IDocumentSavingCallback,尽管单个类可以同时实现两者。
API Reference 摘要
| 类 / 接口 | 描述 |
|---|---|
IDocumentLoadingCallback | Notify(args) — 用于加载进度通知的实现 |
IDocumentSavingCallback | Notify(args) — 用于保存进度通知的实现 |
DocumentLoadingArgs | EstimatedProgress: double — 传递给 IDocumentLoadingCallback.Notify |
DocumentSavingArgs | EstimatedProgress: double — 传递给 IDocumentSavingCallback.Notify |
LoadOptions.ProgressCallback | 将 IDocumentLoadingCallback 附加到加载操作 |
SaveOptions.ProgressCallback | 将 IDocumentSavingCallback 附加到保存操作 |