2013-07-15 28 views
3

我想在使用TWebBrowser的Delphi服務器應用程序(XE2)中創建網頁的屏幕截圖。屏幕截圖是通過對我的服務器的Web服務調用啓動的,因此爲了保持可伸縮性,我想在不依賴關鍵部分或Application.ProcessMessages的情況下服務請求來執行網頁呈現。在沒有Application.ProcessMessages的情況下,TWebBrowser可以在Delphi的線程中使用嗎?

這可以用TWebBrowser完成嗎?

+2

我不明白爲什麼不。 Application.Processmessages肯定是不需要的。提示:查看DocumentComplete事件。 – whosrdaddy

+0

@whosrdaddy,你確定嗎?使用TWebBrowser的典型示例必須處理消息,以便控制初始化並完成其內部工作。處理消息時,應用程序處於空閒狀態,或者調用ProcessMessages。對於服務器,我不確定在等待處理請求時它有多麼可靠。 Andy,請嘗試[嵌入Chrome代替。](http://code.google.com/p/delphichromiumembedded/) –

+0

此Q似乎已被多次詢問。例如:http://stackoverflow.com/questions/3735410/is-it-possible-to-using-webbrowser-in-a-thread-delphi –

回答

1

我已經在很多對象中完成了這個工作,可惜的是TWebBrowser對象非常依賴它的父對象,特別是它的HWND句柄。 (另請參閱TWebBrowser.HandleNeeded)

我得到的最好結果是將TWebBrowser和窗體封裝在ActiveX庫中,所以它後面的「消息泵」與主應用程序分離。這樣ActiveX/COM可以處理所有的線程和同步問題。

+0

這很不幸,但似乎是現實。如果我有成功的話,我會嘗試ActiveX方法並報告回來。謝謝你的幫助。 – Andy

0

嘗試將TWebbrowser放在單獨的exe文件中。這會將其轉移到不同的線程/進程,並獲得模塊化,可伸縮性和性能。 Web服務可以使用IPC或消息傳遞與具有Web瀏覽器的進程進行通信。

使用一個隊列系統來跟蹤捕獲任務的分配和完成到屏幕捕獲過程,或者運行每個要捕獲的站點的exe。

您使用此方法的另一個優點是,如果捕獲程序崩潰,Web服務仍然可以接受請求。 Web服務可以在分配任務之前檢查exe進程是否在內存中,如果不是(崩潰或未啓動)它可以自行啓動exe。

相關問題