WriteableBitmap.Lock Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Réserve la mémoire tampon d'arrière-plan aux mises à jour.
public:
void Lock();
public void Lock ();
member this.Lock : unit -> unit
Public Sub Lock ()
Exemples
L’exemple de code suivant montre comment réserver la mémoire tampon d’arrière-mémoire à l’aide de la Lock méthode .
// The DrawPixel method updates the WriteableBitmap by using
// unsafe code to write a pixel into the back buffer.
static void DrawPixel(MouseEventArgs e)
{
int column = (int)e.GetPosition(i).X;
int row = (int)e.GetPosition(i).Y;
try{
// Reserve the back buffer for updates.
writeableBitmap.Lock();
unsafe
{
// Get a pointer to the back buffer.
IntPtr pBackBuffer = writeableBitmap.BackBuffer;
// Find the address of the pixel to draw.
pBackBuffer += row * writeableBitmap.BackBufferStride;
pBackBuffer += column * 4;
// Compute the pixel's color.
int color_data = 255 << 16; // R
color_data |= 128 << 8; // G
color_data |= 255 << 0; // B
// Assign the color data to the pixel.
*((int*) pBackBuffer) = color_data;
}
// Specify the area of the bitmap that changed.
writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
}
finally{
// Release the back buffer and make it available for display.
writeableBitmap.Unlock();
}
}
Remarques
La Lock méthode incrémente le nombre de verrous. Lorsqu’un WriteableBitmap est verrouillé, le système de rendu n’envoie pas de mises à jour tant que le WriteableBitmap n’est pas complètement déverrouillé par des appels à la Unlock méthode .
Vous pouvez utiliser la Lock méthode pour prendre en charge les implémentations multithread. Dans ces scénarios, le thread d’interface utilisateur verrouille la bitmap et expose la mémoire tampon d’arrière-mémoire à d’autres threads. Lorsque le thread de travail a terminé un frame, le thread d’interface utilisateur ajoute des rectangles modifiés et déverrouille la mémoire tampon.
Le thread d’interface utilisateur peut se bloquer lorsque le thread de rendu acquiert un verrou sur la mémoire tampon d’arrière-plan pour le copier vers la mémoire tampon avant. Si la latence de ce bloc est trop longue, utilisez la TryLock méthode pour attendre un court laps de temps, puis débloquez le thread d’interface utilisateur pour effectuer d’autres tâches pendant que la mémoire tampon d’arrière-mémoire est verrouillée.