WriteableBitmap.Lock Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zarezervuje zpět vyrovnávací paměť pro aktualizace.
public:
void Lock();
public void Lock ();
member this.Lock : unit -> unit
Public Sub Lock ()
Příklady
Následující příklad kódu ukazuje, jak pomocí metody rezervovat vyrovnávací paměť Lock zpět.
// 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();
}
}
Poznámky
Metoda Lock zvýší počet zámků. WriteableBitmap Když je uzamčen, vykreslovací systém neodesílá aktualizace, dokud WriteableBitmap se plně odemkne voláním metodyUnlock.
Tuto metodu Lock můžete použít k podpoře implementací s více vlákny. V těchto scénářích vlákno uživatelského rozhraní zamkne rastrový obrázek a zpřístupní vyrovnávací paměť zpět jiným vlákenm. Po dokončení pracovního vlákna přidá vlákno uživatelského rozhraní změněné obdélníky a odemkne vyrovnávací paměť.
Vlákno uživatelského rozhraní může blokovat, když vlákno vykreslení získá zámek v zadní vyrovnávací paměti, aby ho zkopíroval vpřed do front vyrovnávací paměti. Pokud je latence z tohoto bloku příliš dlouhá, použijte metodu TryLock k čekání na krátkou dobu a potom odblokujte vlákno uživatelského rozhraní, aby provádělo další úlohy při uzamčení vyrovnávací paměti zpět.