IProgressNotify::OnProgress 方法 (objidl.h)

通知已注册的对象和应用程序下载操作的进度。

语法

HRESULT OnProgress(
  [in] DWORD dwProgressCurrent,
  [in] DWORD dwProgressMaximum,
  [in] BOOL  fAccurate,
  [in] BOOL  fOwner
);

参数

[in] dwProgressCurrent

可用数据量。

[in] dwProgressMaximum

要下载的数据总量。

[in] fAccurate

指示 dwProgressCurrentdwProgressMaximum 中值的准确性。 它们要么可靠 (TRUE) ,要么不可靠 (FALSE) 。 FALSE 值指示用于确定尚未下载的数据的实际位置或数量的控制结构不可用。

[in] fOwner

指示此 OnProgress 调用是否可以控制操作的阻止行为。 如果 为 TRUE,则调用方可以使用 OnProgress 中的返回值来阻止 (STG_S_BLOCK) 、重试 (STG_S_RETRYNOW) 或监视 (STG_S_MONITORING) 操作。 如果 为 FALSE则 OnProgress 的返回值对阻止行为没有影响。

返回值

此方法可以返回标准返回值E_FAIL、E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及以下值。

返回代码 说明
STG_S_RETRYNOW
调用方将立即重试该操作。 (此值最适用于从回调例程中阻止的应用程序。)
STG_S_BLOCK
调用方将阻止下载,并根据需要重试调用,以确定是否有其他数据可用。 如果连接点上未注册任何接收器,则这是默认行为。
STG_S_MONITORING
回调接收方将下载过程的控制权放弃给同一流上已注册进度通知接收器的其他对象或应用程序之一。 如果通知接收器仅对收集统计信息感兴趣,这很有用。
E_PENDING
数据当前不可用。 调用方在所需间隔后重试。 如果异步存储要在非阻止模式下运行,则通知接收器将返回此值。

注解

接收器可由给定存储的任何子存储或子流继承。 如果未注册接收器,线程将阻止,直到请求的数据变为可用,或者下载程序取消下载。

如果多个对象或应用程序在单个流上注册了进度通知接收器,则其中只有一个对象或应用程序可以控制下载的行为。 下载的所有权将转到第一个接收器,以向存储或流注册,或者可能已从父存储 (继承的任何建议外观(如果存储是使用 ASYNC_MODE_COMPATIBILITY.)

任何一个接收器都可以通过将STG_S_MONITORING返回到当前调用方的连接点来放弃对下一个连接点的控制。 连接点通过接收STG_S_BLOCK或STG_S_RETRYNOW) 获取控制 (后,所有调用 OnProgress 的后续连接点都将 将 fOwner 设置为 FALSE

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IProgressNotify