2013-08-07 92 views
0

從我的Form1我初始化一個類scrapper。在scrapper類是一個函數login。這個想法是,該類日誌將用戶放在網站上,並返回網絡瀏覽器,以便在Form1中提供已登錄的網頁瀏覽器控件。winform webbrowser沒有被替換

我已經走到這一步,這樣的代碼:Form1

private void button1_Click(object sender, EventArgs e) 
{ 
    Scrapper scrapper = new Scrapper(this); 
    scrapper.login(conf._webLogin); 
} 

public void updateLoginWeb(WebBrowser web) 
{ 
    webBrowser1 = web; 
    MessageBox.Show("DONE"); 
} 

通過conf類:

public WebBrowser _webLogin = new WebBrowser(); 

的刮板類:

private Form1 parent; 

private WebBrowser _web_Login = new WebBrowser(); 


public Scrapper() 
{ 

} 

public Scrapper(Form1 parent) 
    : this() 
{ 
    this.parent = parent; 
} 

public void login(WebBrowser web) 
{ 
    _web_Login = web; 
    _web_Login.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(login_DocumentCompleted); 
    _web_Login.Navigate("http://www.google.com/"); 
} 

private void login_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    //This line is so you only do the event once 
    if (e.Url != _web_Login.Url) 
     return; 
    parent.updateLoginWeb(_web_Login); 
} 

我使用谷歌作爲測試,但沒有任何作品(甚至沒有其他網站)。

問題是Form中的瀏覽器未更新。它仍然是一個白色的屏幕。

你們對此有何看法?你知道問題是什麼嗎?或者你知道更好的方法來處理這個問題嗎?

+0

你有跨線程調用Web瀏覽器嗎? – volody

+0

@ user64,不。只是這一件事被一個按鈕觸發...... – Mathlight

+1

webbrowser是否在UI線程上運行? webbrowser使用代理?檢查是否google.com顯示在IE – volody

回答

1

我覺得你的問題是,你不能簡單地分配web瀏覽器變量:

webBrowser1 = web; 

您正在改變Form1.webBrower1變量,但Forms.Controls集合仍然指向原來的WebBrowser控件。

你就不能傳遞到Form1.webBrower1功能scrapper.login?:

private void button1_Click(object sender, EventArgs e) 
{ 
    Scrapper scrapper = new Scrapper(this); 
    scrapper.login(webBrowser1); 
} 

public void updateLoginWeb(WebBrowser web) 
{ 
    //webBrowser1 = web; // you don't need this anymore 
    MessageBox.Show("DONE"); 
} 

如果你真的需要更換您的控制,你可以這樣做:

public void updateLoginWeb(WebBrowser web) 
{ 
    Controls.Remove(webBrowser1); 
    Controls.Add(web); 
    webBrowser1 = web; // you don't need this anymore 
    MessageBox.Show("DONE"); 
} 

但你可能會手動設置新的webbrowser佈局屬性。

+0

好吧,但是我如何才能讓webbrowser在我工作的時候(登錄和al類的東西)回到Form1顯示。或者你知道cookies是共享的。因此,當我登錄(它是基於cookie的)時,我也登錄了任何其他webbrowser控件(即使我稍後創建該控件) – Mathlight

+0

只能使用一個WebBrowser控件嗎? Form1.webBrowser1,並在刮板類中使用它?不要創建一個不同的一個 – fcuesta

+0

嗯,事情是,我可能最終在webbrowser的1時刻做2個或更多的事情。所以我需要多個任務... – Mathlight