當Web瀏覽器導航並加載頁面時,如何防止GUI凍結?爲什麼GUI在瀏覽器導航和加載時會凍結?
webBrowser1.Navigate("http://www.costco.com/");
例如,當它導航到該網站時,我的程序會稍微凍結,尤其是當網頁加載時。我無法拖動和移動窗體。選項卡控件中的選項卡按鈕無法單擊。我必須等待網頁完全加載才能解凍。
我注意到獨立的Internet Explorer網頁瀏覽器不這樣做。它在加載網頁時不會凍結。
如何防止網頁在加載時凍結UI?
當Web瀏覽器導航並加載頁面時,如何防止GUI凍結?爲什麼GUI在瀏覽器導航和加載時會凍結?
webBrowser1.Navigate("http://www.costco.com/");
例如,當它導航到該網站時,我的程序會稍微凍結,尤其是當網頁加載時。我無法拖動和移動窗體。選項卡控件中的選項卡按鈕無法單擊。我必須等待網頁完全加載才能解凍。
我注意到獨立的Internet Explorer網頁瀏覽器不這樣做。它在加載網頁時不會凍結。
如何防止網頁在加載時凍結UI?
根據我的經驗,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不導航您可以撥打DoEvents
每OnProgressChanged
活動期間凍結:
private void webBrowser1_OnProgressChanged(WebBrowserProgressChangedEventArgs e)
{
Application.DoEvents(); //update ui
}
謝謝你的回答,但它不起作用。我通過添加帶有兩個標籤頁的另一個標籤控件來測試您的代碼。當執行boo()時,我快速地多次點擊了tabpage1和tabpage 2,並且它們不能被點擊大約1到2秒,因爲在網頁加載時,導航期間GUI稍微凍結。 – user3231203
我認爲問題出在您正在加載的網頁上。它是否加載了像java或flash player這樣的插件? (他們可能會導致這樣的問題) – Pooya
當你調用'Navigate',在代碼有什麼意義呢? – DonBoitnott
下按鈕1_click – user3231203
您是否嘗試過使用'async/await'? – rhughes