在WinForm里面添加了一個CEF控制元件(用代碼添加的沒用設計器),然后在Form代碼里面添加了invokeCapture屬性,希望能通過這個方法來對CEF的整個頁面截圖。第一次截圖是正常的,但是從第二次截圖開始就一直報錯,也截不出來。報錯資訊是“Generated MessageID 100002 doesn't match returned Message Id 100001”。有沒有辦法可以多次截圖。
鄙人把github cefsharp那個DevToolsExtensions.cs那個代碼復制到專案里面來了,然后也把命名空間改過來了。
那個DevToolsClient里面的lastMessageId變數是private的,也沒個getter和setter,這個變數在CaptureScreenshot方法執行ExecuteDevToolsMethodAsync方法里面的陳述句時候要用到。這就很煩人了,ExecuteDevToolsMethodAsync要把這個類里面的lastMessageId和執行ExecuteDevToolsMethod方法回傳的訊息ID做比較,如果不一樣就會報錯并且強制終止執行,CEF控制元件的GetDevToolsClient方法也看了一下,這方法實際上也是直接new物件的,就是github那個示例代碼的第36行,而這個new物件之后給lastMessageId賦值是相對于CEF是寫死的。
這個問題鄙人在StackOverflow也問了,過了大半天沒人回復,也沒人點贊點踩。不知道CSDN這邊有沒有大佬會解決這個了。

private async void invokeCapture()
{
try
{
byte[] result = await winformcefdemo.CefSharp.Example.DevTools.DevToolsExtensions.CaptureScreenShotAsPng(browser);
// task.Start();
// byte[] result = task.Result;
SaveFileDialog dialog = new SaveFileDialog();
DialogResult dresult = dialog.ShowDialog();
if (dresult == DialogResult.OK)
{
string path = dialog.FileName;
try
{
File.WriteAllBytes(path, result);
MessageBox.Show(path + " saved success");
} catch (Exception e)
{
MessageBox.Show(path + "Unknown error occurred when saving to file: " + e.Message);
}
}
}
catch (Exception ee)
{
MessageBox.Show("Unknown error occurred when capturing: " + ee.Message);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/236917.html
下一篇:EF contain()問題
