Cra sh с использованием SharpDX и D3DImage после повторного подключения к сеансу RDP - PullRequest
0 голосов
/ 17 апреля 2020

Я использую тот же подход, объясненный здесь , чтобы избежать проблемы с D3DImage.SetBackBuffer () через RDP, но я обнаружил, что при отключении и повторном подключении к одному сеансу , ASA Я изменяю размер элемента управления, получаю исключение: Недопустимое устройство резервного буфера .

Вот код, который я использую

public void Update(SharpDX.Direct3D11.Device device, SharpDX.Direct3D11.DeviceContext context,
    Texture2D wpfSharedSurface, IntPtr sharedSurfacePtr)
{
    // Make sure that Lock/Unlock/SetBackBuffer...etc. are called on the UI thread
    context.ResolveSubresource(Surface.RenderTexture, 0, wpfSharedSurface, 0,
        Surface.RenderTexture.Description.Format);

    // Emits the proper Query.End to track the end of rendering for this BeginDraw/EndDraw pair.
    device.ImmediateContext.End(Surface.QuerySync);
    device.ImmediateContext.Flush();

    while (!device.ImmediateContext.IsDataAvailable(Surface.QuerySync))
    {

    }

    // http://msdn.microsoft.com/en-us/library/system.windows.interop.d3dimage.aspx

    D3DImageInstance.Lock();

    D3DImageInstance.SetBackBuffer(D3DResourceType.IDirect3DSurface9, sharedSurfacePtr, true // allow RDP to work 
        );
    D3DImageInstance.AddDirtyRect(new Int32Rect(0, 0, Width, Height));
    D3DImageInstance.Unlock();
}

На изображении ниже показано ошибка, которая возникает enter image description here

Я также пытался найти подсказки здесь и здесь без удачи (как и ожидалось)

...