簡體   English   中英

C ++ / MFC-防止吊子(ActiveX)控件凍結整個UI?

[英]C++/MFC - Preventing a hanging child (ActiveX) control from freezing the whole UI?

我目前正在使用Microsoft的WebBrowser ActiveX控件,我注意到可以通過加載使嵌入式IE崩潰的網頁來凍結整個程序。 所以我想知道是否有什么方法可以防止整個程序凍結?

我已經嘗試過:-創建一個新的CWinThread創建/處理控件->相同的結果-從此線程創建一個新對話框創建/處理控件->相同的結果

問題似乎在消息系統中很深,但是我不確定。

誰能告訴我是否甚至有可能防止整個UI /對話框凍結,並且是什么導致了此問題?

(我已經在網上搜索過,但是找不到任何真正的解決方案)

Thanx,加里

PS:目前對我來說唯一有效的方法是創建一個新的子進程來加載/處理控件。 我可以對其進行修改,使其看起來像主對話框的子窗口,但這使我能夠直接從主對話框代碼訪問控件。

編輯:

好吧,我找到了一個令我滿意的解決方案。 我正在主應用程序中創建一個占位符窗口,並啟動一個包含實際控件的新子進程。 我委托所有窗口移動/大小/等。 消息發送給子進程,以便它可以重新定位/反應。 重要的是不要從我的主應用程序中將新流程創建為WS_CHILD對象,因為那樣仍會凍結它。 我正在通過內存映射與進程共享信息,並使用自定義用戶消息進行通信。 我希望這會更容易...

這是一個非常復雜的區域。 防止一個UI對象出現問題導致直接釋放的父UI對象出現問題對於瀏覽器人員來說已經花費了很多時間,他們試圖確保一個選項卡不會崩潰。 我認為可以說這是火箭科學,這是一個太大的話題,無法在此描述。

您已經選擇了一個很好的起點(將框架分為一個新的過程)。 您還需要了解的其他事情是線程輸入隊列和AttachThreadInput(http://msdn.microsoft.com/zh-cn/library/ms681956(VS.85).aspx)。 雷蒙德對此也有一些了解; 包括PDC演講的一部分http://blogs.msdn.com/b/oldnewthing/archive/2008/08/01/8795860.aspx

額外建議:這里的一種替代方法可能是,如果不需要,則禁止在瀏覽器控件中加載AX控件。 而且,如果確實需要它們並且正在構建非常通用的瀏覽器替代品,那么您應該期望進行大量工作來復制在主瀏覽器中所能找到的穩定性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM