Partager via


DynamicRenderer.ReleaseCachedData, méthode

Mise à jour : November 2007

Libère les données de stylet du cache de l'objet DynamicRenderer.

Espace de noms :  Microsoft.StylusInput
Assembly :  Microsoft.Ink (dans Microsoft.Ink.dll)

Syntaxe

'Déclaration
Public Sub ReleaseCachedData ( _
    cachedDataId As Integer _
)
'Utilisation
Dim instance As DynamicRenderer
Dim cachedDataId As Integer

instance.ReleaseCachedData(cachedDataId)
public void ReleaseCachedData(
    int cachedDataId
)
public:
void ReleaseCachedData(
    int cachedDataId
)
public void ReleaseCachedData(
    int cachedDataId
)
public function ReleaseCachedData(
    cachedDataId : int
)

Paramètres

  • cachedDataId
    Type : System.Int32
    Identificateur des données à libérer.

Notes

Cette méthode est utilisée uniquement lorsque la propriété EnableDataCache a la valeur true.

Affecter la valeur true à la propriété EnableDataCache vous permet de gérer la situation lorsque des processus lents bloquent la file d'attente de sortie. Si la fenêtre est invalidée pendant un moment après le dessin de traits par l'objet DynamicRenderer, un délai peut s'écouler avant que les traits collectés puissent être à nouveau dessinés. En plaçant les traits du DynamicRenderer en cache, ceux-ci peuvent être redessinés via un appel à la méthode Refresh. Toutefois, une fois que les traits sont collectés, libérez-les du cache en appelant la méthode ReleaseCachedData. En général, cette action se produit dans la méthode CustomStylusDataAdded.

Il est également utile d'affecter la valeur true à la propriété EnableDataCache lorsque vous souhaitez afficher des traits à mesure qu'ils sont dessinés, mais uniquement lorsque vous les avez utilisés et lorsque vous n'avez plus besoin de les stocker. Dans ce cas, stockez les identificateurs de données dans le paramètre data de la méthode CustomStylusDataAdded, puis libérez les données lorsque vous n'avez plus besoin des traits mis en cache.

Exemples

Cet exemple C# développe le RealTimeStylus Ink Collection Sample fourni dans la section technologie Tablet and Touch du Kit de développement logiciel Windows. Après avoir activé le DynamicRenderer, theDynamicRenderer, la valeur true est affectée à la propriété EnableDataCache. La propriété DataInterest est modifiée de sorte que DataInterestMask soit ajouté. La méthode CustomStylusDataAdded recherche des données avec l'identificateur de champ DynamicRendererCachedDataGuid, puis libère les données à l'aide de la propriété CachedDataId des données.

// ...
private void InkCollection_Load(object sender, System.EventArgs e)
{
    // ...
    
    // Enable the real time stylus and the dynamic renderer
    theRealTimeStylus.Enabled = true;
    theDynamicRenderer.Enabled = true;  

    // Enable caching. If a refresh happens during inking, then
    // the stroke will still be displayed.  However, we have to 
    // release the cached data later.
    theDynamicRenderer.EnableDataCache = true;
    
    // ...
}
// ...
public DataInterestMask DataInterest
{
    get
    {
        return DataInterestMask.StylusDown |
               DataInterestMask.Packets |
               DataInterestMask.StylusUp |
               DataInterestMask.Error |
               DataInterestMask.CustomStylusDataAdded;
    }
}
public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data)
{
    // Release any cached data that's shown up.
    if (data.CustomDataId == DynamicRenderer.DynamicRendererCachedDataGuid)
    {
       DynamicRendererCachedData cachedData = (DynamicRendererCachedData) data.Data;
       cachedData.DynamicRenderer.ReleaseCachedData(cachedData.CachedDataId);
    }
}
// ...

Cet exemple C# place les données d'un objet DynamicRenderer en cache. Cela garantit qu'une invalidation de fenêtre n'efface pas les traits. L'exemple efface ensuite les traits par programme. Après avoir activé l'objet DynamicRenderer, theDynamicRenderer, la propriété EnableDataCache a la valeur true. Dans le gestionnaire d'événements Paint (page pouvant être en anglais), l'exemple appelle DynamicRenderer.Refresh pour redessiner les données de stylet dans le cache. La propriété DataInterest est modifiée de sorte que DataInterestMask soit ajouté. La méthode CustomStylusDataAdded recherche des données avec l'identificateur de champ DynamicRendererCachedDataGuid et stocke l'identificateur de données dans un ArrayList, cachedIds (page pouvant être en anglais). La méthode ClearStrokes appelle ReleaseCachedData sur tous les identificateurs dans cachedIds, puis appelle Refresh (page pouvant être en anglais) sur le Control (page pouvant être en anglais).

using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;
// ...
public class InkCollection : Form, IStylusAsyncPlugin
{ 
    private RealTimeStylus theRealTimeStylus;
    private DynamicRenderer theDynamicRenderer;
    private ArrayList cachedIds = new ArrayList();
// ...
    private void TempInkCollection_Load(object sender, System.EventArgs e)
    {
        theDynamicRenderer = new DynamicRenderer(this);
        theRealTimeStylus = new RealTimeStylus(this, true);

        // Add the dynamic renderer to the synchronous plugin notification chain.
        // Synchronous notifications occur on the pen thread.
        theRealTimeStylus.SyncPluginCollection.Add(theDynamicRenderer);

        // Add the form to the asynchronous plugin notification chain.  This plugin
        // will be used to collect stylus data into an ink object.  Asynchronous
        // notifications occur on the UI thread.
        theRealTimeStylus.AsyncPluginCollection.Add(this);

        // Enable the real time stylus and the dynamic renderer
        theRealTimeStylus.Enabled = true;
        theDynamicRenderer.Enabled = true;  

        // Enable caching. If a refresh happens during inking, then
        // the stroke will still be displayed.  However, we have to 
        // release the cached data later.
        theDynamicRenderer.EnableDataCache = true;
    }
// ...
    private void InkCollection_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        // Refresh the dynamic renderer, since it's possible that a stroke is being
        // collected at the time Paint occurs.  In this case, the portion of the stroke
        // that has already been collected will need to be redrawn.
        theDynamicRenderer.ClipRectangle = e.ClipRectangle;
        theDynamicRenderer.Refresh();
    }
// ...
    public DataInterestMask DataInterest
    {
        get
        {
            return DataInterestMask.CustomStylusDataAdded;
        }
    }

    public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data)
    {
        // Release any cached data that's shown up.
        if (data.CustomDataId == DynamicRenderer.DynamicRendererCachedDataGuid)
        {
            DynamicRendererCachedData cachedData = (DynamicRendererCachedData) data.Data;
            cachedIds.Add(cachedData.CachedDataId);
        }
    }
// ...
    private void ClearStrokes()
    {
        // Release all data
        foreach int dataId in cachedIds
        {
            theDynamicRenderer.ReleaseCachedData(dataId);
        }
        // Clear our stored list of Ids
        cachedIds.Clear();
        // Refresh the window
        this.Refresh()
    }
}

Cet exemple Microsoft Visual Basic .NET place les données d'un objet DynamicRenderer en cache. Cela garantit qu'une invalidation de fenêtre n'efface pas les traits. L'exemple efface ensuite les traits par programme. Après avoir activé l'objet DynamicRenderer, theDynamicRenderer, la propriété EnableDataCache a la valeur true. Dans le gestionnaire d'événements Paint (page pouvant être en anglais), l'exemple appelle DynamicRenderer.Refresh pour redessiner les données de stylet dans le cache. La propriété DataInterest est modifiée de sorte que DataInterestMask soit ajouté. La méthode CustomStylusDataAdded recherche des données avec l'identificateur de champ DynamicRendererCachedDataGuid et stocke l'identificateur de données dans un ArrayList, cachedIds (page pouvant être en anglais). La sous-routine ClearStrokes appelle ReleaseCachedData sur tous les identificateurs dans cachedIds, puis appelle Refresh (page pouvant être en anglais) sur le Control (page pouvant être en anglais).

Imports Microsoft.StylusInput
Imports Microsoft.StylusInput.PluginData
' ...
Public Class TempInkCollector
    Inherits System.Windows.Forms.Form
    Implements Microsoft.StylusInput.IStylusAsyncPlugin

    Private theRealTimeStylus As RealTimeStylus
    Private theDynamicRenderer As DynamicRenderer
    Private cachedIds As ArrayList = New ArrayList()
' ...
    Private Sub TempInkCollector_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        theDynamicRenderer = New DynamicRenderer(Me)
        theRealTimeStylus = New RealTimeStylus(Me, True)

        ' Add the dynamic renderer to the synchronous plugin notification chain.
        ' Synchronous notifications occur on the pen thread.
        theRealTimeStylus.SyncPluginCollection.Add(theDynamicRenderer)

        ' Add the form to the asynchronous plugin notification chain.  This plugin
        ' will be used to collect stylus data into an ink object.  Asynchronous
        ' notifications occur on the UI thread.
        theRealTimeStylus.AsyncPluginCollection.Add(Me)

        ' Enable the real time stylus and the dynamic renderer
        theRealTimeStylus.Enabled = True
        theDynamicRenderer.Enabled = True
        theDynamicRenderer.EnableDataCache = True
    End Sub
' ...
    Private Sub InkCollector_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        ' Refresh the dynamic renderer, since it's possible that a stroke is being
        ' collected at the time Paint occurs.  In this case, the portion of the stroke
        ' that has already been collected will need to be redrawn.
        theDynamicRenderer.ClipRectangle = e.ClipRectangle
        theDynamicRenderer.Refresh()
    End Sub
'...
    Overridable Overloads ReadOnly Property DataInterest() As DataInterestMask Implements IStylusAsyncPlugin.DataInterest
        Get
            Return DataInterestMask.CustomStylusDataAdded
        End Get
    End Property
    Public Sub CustomStylusDataAdded(ByVal sender As Microsoft.StylusInput.RealTimeStylus, ByVal data As Microsoft.StylusInput.PluginData.CustomStylusData) Implements Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded
        If data.CustomDataId.Equals(DynamicRenderer.DynamicRendererCachedDataGuid) Then
            ' Convert to DynamicRendererCachedData
            Dim cachedData As DynamicRendererCachedData = data.Data
            ' Add to list of ids.
            cachedIds.Add(cachedData.CachedDataId)
        End If
    End Sub
' ...
    Private Sub ClearStrokes()
        ' Release all data
        Dim dataId As Integer
        For Each dataId In cachedIds
            theDynamicRenderer.ReleaseCachedData(dataId)
        Next
        ' Clear our stored list of Ids
        cachedIds.Clear()
        ' Refresh the window
        Me.Refresh()
    End Sub
End Class

Plateformes

Windows Vista, Windows XP SP2, Windows Server 2003

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Informations de version

.NET Framework

Pris en charge dans : 3.0

Voir aussi

Référence

DynamicRenderer, classe

Membres DynamicRenderer

Microsoft.StylusInput, espace de noms

DynamicRenderer.EnableDataCache

DynamicRenderer.Refresh

DynamicRendererCachedData

Autres ressources

Dynamic-Renderer Plug-ins