WriteableBitmap.Lock 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
保留后台缓冲区用于更新。
public:
void Lock();
public void Lock ();
member this.Lock : unit -> unit
Public Sub Lock ()
示例
下面的代码示例演示如何使用 Lock 方法保留后台缓冲区。
// 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();
}
}
注解
方法 Lock 递增锁计数。 WriteableBitmap锁定 时,呈现系统不会发送更新,WriteableBitmap直到 通过调用 Unlock 方法完全解锁 。
可以使用 Lock 方法支持多线程实现。 在这些方案中,UI 线程会锁定位图,并将后台缓冲区公开给其他线程。 当工作线程完成帧时,UI 线程会添加更改的矩形并解锁缓冲区。
当呈现线程在后台缓冲区上获取锁以将其向前复制到前缓冲区时,UI 线程可以阻止。 如果此块的延迟太长,请使用 TryLock 方法等待一小段时间,然后在锁定后台缓冲区时取消阻止 UI 线程执行其他任务。