ISupportFilteredSync.TryAddFilter 方法

在派生类中重写时,设置由源提供程序用于变更枚举的筛选器。

命名空间: Microsoft.Synchronization
程序集: Microsoft.Synchronization(在 microsoft.synchronization.dll 中)

语法

声明
Function TryAddFilter ( _
    filter As Object, _
    filteringType As FilteringType _
) As Boolean
用法
Dim instance As ISupportFilteredSync
Dim filter As Object
Dim filteringType As FilteringType
Dim returnValue As Boolean

returnValue = instance.TryAddFilter(filter, filteringType)
bool TryAddFilter (
    Object filter,
    FilteringType filteringType
)
bool TryAddFilter (
    Object^ filter, 
    FilteringType filteringType
)
boolean TryAddFilter (
    Object filter, 
    FilteringType filteringType
)
function TryAddFilter (
    filter : Object, 
    filteringType : FilteringType
) : boolean

参数

  • filter
    由源提供程序用于变更枚举的筛选器。
  • filteringType
    指示在筛选的同步过程中变更批中包含的信息类型。

返回值

如果支持 filter 指定的筛选器,则为 True。否则为 false

备注

筛选器协商的实现步骤如下:

  1. 在源提供程序开始枚举变更之前,Sync Framework 通过调用目标提供程序实现的 IRequestFilteredSync 接口的 SpecifyFilter 方法启动筛选器协商。

  2. 在处理 SpecifyFilter 的过程中,目标提供程序会将筛选器传递给 Sync Framework 指定的 FilterRequestCallback

  3. 在处理 FilterRequestCallback 的过程中,Sync Framework 调用源提供程序实现的 ISupportFilteredSync 接口的 TryAddFilter 方法。如果源提供程序不支持请求的筛选器,则目标提供程序会继续请求筛选器,直到找到一个受支持的筛选器。

成功协商筛选器后,源提供程序使用该筛选器来确定在变更枚举的过程中要包含哪些项。

实施者注意事项: 此方法的实现可检查由 filter 和 filteringType 指定的筛选器,如果返回 false,则指示不支持该筛选器。然后,目标提供程序可请求其他筛选器,直到找到一个受支持的筛选器。

示例

以下示例实现 TryAddFilter。仅当某个筛选器是副本跟踪的筛选器时,才将该筛选器用于同步。

Public Function TryAddFilter(ByVal filter As Object, ByVal filteringType As FilteringType) As Boolean Implements ISupportFilteredSync.TryAddFilter
    _filterForSync = Nothing

    ' The filter must be tracked by both replicas.
    For filterKey As Integer = 0 To _filterKeyMap.Count - 1
        If _filterKeyMap(filterKey).IsIdentical(DirectCast(filter, ISyncFilter)) Then
            _filterForSync = DirectCast(_filterKeyMap(filterKey), AddressFilter)
            _filteringType = filteringType
            Exit For
        End If
    Next

    Return (_filterForSync IsNot Nothing)
End Function
public bool TryAddFilter(object filter, FilteringType filteringType)
{
    _filterForSync = null;

    // The filter must be tracked by both replicas.
    for (int filterKey = 0; filterKey < _filterKeyMap.Count; filterKey++)
    {
        if (_filterKeyMap[filterKey].IsIdentical((ISyncFilter)filter))
        {
            _filterForSync = (AddressFilter)_filterKeyMap[filterKey];
            _filteringType = filteringType;
            break;
        }
    }

    return (null != _filterForSync);
}

请参阅

参考

ISupportFilteredSync 接口
ISupportFilteredSync 成员
Microsoft.Synchronization 命名空间