代碼參考:https://github.com/aredfox/screencapturer電子UI BrowserWindow凍結主BrowserWindow
問題描述: Here爲electron應用程式,其保持按鈕 「開始捕獲」 一個 「主窗口」。一旦點擊了,它就向主進程發送一個事件,然後主進程啓動一個新的,獨立的,名爲「captureWindow」的「BrowserWindow」對象,並擁有自己的capture.html和capture.js。在capture.js中,每三秒製作一個屏幕截圖並保存到c:\ temp \ screencap(這是一個用於演示問題的演示應用程序,因此我暫時沒有對此進行配置和硬編碼)。每次在'craptureWindow'中捕獲都會凍結,這是我預期的結果。但是,'mainWindow'對象也凍結了,我沒有想到它會這樣做。 我應該如何處理這個問題,以便在另一個「BrowserWindow」對象中運行進程時,mainWindow不會凍結?我認爲電子BrowserWindows(或「標籤」)有一個單獨的線程?
EDIT 20/12/2016 可能是罪魁禍首desktopCapturer.getSources()。
附錄:發現問題必須位於getMainSource
的代碼塊內,因爲當我緩存「源」結果時,它不會凍結整個電子。因此,過濾方法或屏幕本身導致凍結問題一定是這樣。
function getMainSource(desktopCapturer, screen, done) {
const options = {
types: ['screen'], thumbnailSize: screen.getPrimaryDisplay().workAreaSize
}
desktopCapturer.getSources(options, (err, sources) => {
if (err) return console.log('Cannot capture screen: ', err)
const isMainSource = source => source.name === 'Entire screen' || source.name === 'Screen 1'
done(sources.filter(isMainSource)[0])
})
}
溶液雖然沒有緩存getMainSource的結果(也稱爲「源」),因爲這將當然每次導致相同的圖像數據。我證實,通過寫入文件爲PNG,並且確實每個截圖都是完全相同的,儘管桌面上已經發生了足夠的變化。 TODO:可能的選擇是設置視頻流並保存流中的圖像?