SetConsoleActiveScreenBuffer zeigt keinen Bildschirmpuffer an

Ich versuche derzeit, eine Konsolenanwendung in C # mit zwei Bildschirmpuffern zu schreiben, die hin und her ausgetauscht werden sollten (ähnlich wie VSync auf einer modernen GPU). Seit derSystem.Console Klasse bietet keine Möglichkeit zum Wechseln von Puffern, ich musste mehrere Methoden von kernel32.dll p / aufrufen.

Dies ist mein aktueller Code, grob vereinfacht:

static void Main(string[] args)
{
    IntPtr oldBuffer = GetStdHandle(-11); //Gets the handle for the default console buffer
    IntPtr newBuffer = CreateConsoleScreenBuffer(0, 0x00000001, IntPtr.Zero, 1, 0); //Creates a new console buffer

    /* Write data to newBuffer */

    SetConsoleActiveScreenBuffer(newBuffer);
}

Die folgenden Dinge sind aufgetreten:

Der Bildschirm bleibt leer, obwohl es angezeigt werden solltenewBufferWenn an @ geschrieboldBuffer Anstatt vonnewBuffer werden die Daten sofort angezeigt. Daher sollte meine Schreibweise im Puffer korrekt sein.Upon aufrufenSetConsoleActiveScreenBuffer(newBuffer), der Fehlercode ist jetzt 6, was ein ungültiges Handle bedeutet. Dies ist seltsam, da das Handle nicht -1 ist, was in der Dokumentation als ungültig beschrieben wird.

Ich sollte beachten, dass ich sehr selten direkt mit der Win32-API gearbeitet habe und sehr wenig Verständnis für allgemeine Win32-Probleme habe. Ich würde mich über jede Hilfe freuen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage