2014-01-24 28 views
5

當Web瀏覽器導航並加載頁面時,如何防止GUI凍結?爲什麼GUI在瀏覽器導航和加載時會凍結?

webBrowser1.Navigate("http://www.costco.com/"); 

例如,當它導航到該網站時,我的程序會稍微凍結,尤其是當網頁加載時。我無法拖動和移動窗體。選項卡控件中的選項卡按鈕無法單擊。我必須等待網頁完全加載才能解凍。

我注意到獨立的Internet Explorer網頁瀏覽器不這樣做。它在加載網頁時不會凍結。

如何防止網頁在加載時凍結UI?

+0

當你調用'Navigate',在代碼有什麼意義呢? – DonBoitnott

+0

下按鈕1_click – user3231203

+0

您是否嘗試過使用'async/await'? – rhughes

回答

0

根據我的經驗,Navigate方法是一個非阻塞函數,它不會freez UI。

一個可能的原因是你的用戶界面初始化之前調用它......你要調用此函數形式加載後:

bool form_loaded=false; 

private void Navigate(String url) 
{ 
if(form_laded) 
    webBrowser1.Navigate(url); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
     form_loaded = true 
} 
. 
. 
. 
void boo() 
{ 
    Navigate ("http://stackoverflow.com"); 
} 

`

如果你想確保UI不導航您可以撥打DoEventsOnProgressChanged活動期間凍結:

private void webBrowser1_OnProgressChanged(WebBrowserProgressChangedEventArgs e) 
{ 
    Application.DoEvents(); //update ui 
} 
+0

謝謝你的回答,但它不起作用。我通過添加帶有兩個標籤頁的另一個標籤控件來測試您的代碼。當執行boo()時,我快速地多次點擊了tabpage1和tabpage 2,並且它們不能被點擊大約1到2秒,因爲在網頁加載時,導航期間GUI稍微凍結。 – user3231203

+0

我認爲問題出在您正在加載的網頁上。它是否加載了像java或flash player這樣的插件? (他們可能會導致這樣的問題) – Pooya

相關問題