2013-08-07 53 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