WriteableBitmap.Lock Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Reserveert de backbuffer voor updates.
public:
void Lock();
public void Lock();
member this.Lock : unit -> unit
Public Sub Lock ()
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de backbuffer kunt reserveren met behulp van de Lock methode.
// 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();
}
}
Opmerkingen
Met Lock de methode wordt het aantal vergrendelingen verhoogd. Wanneer een WriteableBitmap bestand is vergrendeld, verzendt het renderingsysteem geen updates totdat het WriteableBitmap volledig is ontgrendeld door aanroepen naar de Unlock methode.
U kunt de Lock methode gebruiken om implementaties met meerdere threads te ondersteunen. In deze scenario's vergrendelt de UI-thread de bitmap en maakt de backbuffer zichtbaar voor andere threads. Wanneer de werkrolthread een frame heeft voltooid, voegt de UI-thread gewijzigde rechthoeken toe en ontgrendelt de buffer.
De UI-thread kan blokkeren wanneer de render-thread een vergrendeling op de achterbuffer verkrijgt om deze naar de voorbuffer te kopiƫren. Als de latentie van dit blok te lang is, gebruikt u de TryLock methode om even te wachten en de ui-thread vervolgens te deblokkeren om andere taken uit te voeren terwijl de backbuffer is vergrendeld.