CefSharp ScreenshotAsync не всегда возвращает правильное растровое изображение
У меня проблемы с захватом каждого кадра анимации с использованием ограниченного объекта CefSharp. Похоже, растровое изображение возвращается Browser.ScreenshotAsync
не всегда правильно синхронизированы. Это моя функция рендеринга JavaScript, которая перемещает объект WebGL по горизонтали с постоянной скоростью:
function animate() {
object.position.x -= 100;
renderer.render(scene, camera);
cefBountObject('animate()');
}
Это мой ограниченный объект CEF:
public void cefBountObject(string callback) {
Browser.ScreenshotAsync().ContinueWith((task) => {
task.Result.Save(string.Format("{0:D4}.png", frameNumber++));
Browser.EvaluateScriptAsync(callback);
});
}
При этом каждый файл в последовательности сохраняется без пропусков: 0000.png, 0001.png, 0002.png и т. Д. Однако некоторые файлы изображений повторяются, а некоторые файлы изображений пересекают фрейм. Я думаю, что столкнулся с проблемой несинхронизированных потоков, но я не вижу, где это может быть. На самом деле, если я поставлю точку останова на последней строке Browser.EvaluateScriptAsync(callback);
и пошаговая анимация, все файлы будут сгенерированы правильно.