Compartir a través de


WriteableBitmap.Lock Método

Definición

Restringe el búfer de reserva a las actualizaciones.

public:
 void Lock();
public void Lock ();
member this.Lock : unit -> unit
Public Sub Lock ()

Ejemplos

En el ejemplo de código siguiente se muestra cómo reservar el búfer de reserva mediante el Lock método .

    // 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();
        }
    }

Comentarios

El Lock método incrementa el recuento de bloqueos. Cuando se bloquea , WriteableBitmap el sistema de representación no envía actualizaciones hasta WriteableBitmap que se desbloquea por completo mediante llamadas al Unlock método .

Puede usar el Lock método para admitir implementaciones multiproceso. En estos escenarios, el subproceso de la interfaz de usuario bloquea el mapa de bits y expone el búfer de reserva a otros subprocesos. Cuando el subproceso de trabajo ha finalizado un marco, el subproceso de la interfaz de usuario agrega rectángulos modificados y desbloquea el búfer.

El subproceso de interfaz de usuario puede bloquearse cuando el subproceso de representación adquiere un bloqueo en el búfer de reserva para copiarlo al búfer frontal. Si la latencia de este bloque es demasiado larga, use el TryLock método para esperar un breve tiempo y, a continuación, desbloquee el subproceso de interfaz de usuario para realizar otras tareas mientras el búfer de reserva está bloqueado.

Se aplica a

Consulte también