WriteableBitmap.Lock Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Geri arabelleği güncelleştirmeler için ayırır.
public:
void Lock();
public void Lock();
member this.Lock : unit -> unit
Public Sub Lock ()
Örnekler
Aşağıdaki kod örneği, yöntemini kullanarak geri arabelleği ayırma işlemini Lock gösterir.
// 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();
}
}
Açıklamalar
Lock yöntemi, kilit sayısını artırır. bir WriteableBitmap kilitlendiğinde, işleme sistemi yöntemine yapılan çağrılar tarafından kilidi tamamen kaldırılana WriteableBitmap kadar Unlock güncelleştirme göndermez.
çok iş parçacıklı uygulamaları desteklemek için yöntemini kullanabilirsiniz Lock . Bu senaryolarda UI iş parçacığı bit eşlemi kilitler ve geri arabelleği diğer iş parçacıklarında kullanıma sunar. Çalışan iş parçacığı bir çerçeveyi tamamladığında, ui iş parçacığı değiştirilmiş dikdörtgenler ekler ve arabelleğin kilidini açar.
Ui iş parçacığı, işleme iş parçacığı ön arabelleğe ileriye doğru kopyalamak için arka arabellekte bir kilit aldığı zaman engelleyebilir. Bu bloktan gecikme süresi çok uzunsa, kısa bir süre beklemek için yöntemini kullanın TryLock ve ardından arka arabellek kilitliyken diğer görevleri gerçekleştirmek için UI iş parçacığının engelini kaldırın.