问题描述
这是我的课程:
λ>
λ> import Control.Arrow
λ>
λ> maximumBy (comparing (second id)) (zip xs [0..])
(7,3)
λ>
λ> maximumBy (comparing (second negate)) (zip xs [0..])
(7,1)
λ>
λ> maximumBy (comparing (id *** negate)) (zip xs [0..])
(7,1)
λ>
在主代码中:
class WebRequestWaiter
{
private WebBrowser webBrowser_;
private bool completed_ = false;
private Guid uuid_ = Guid.NewGuid();
public WebRequestWaiter(WebBrowser webBrowser)
{
webBrowser_ = webBrowser;
webBrowser_.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler((sender,e) => _webBrowserDocumentCompleted(sender,e,uuid_));
}
private void _webBrowserDocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e,Guid uuid)
{
if (uuid == uuid_)
{
completed_ = true;
webBrowser_.DocumentCompleted -= (sender2,e2) => _webBrowserDocumentCompleted(sender,uuid);
}
}
public void WaitForComplete()
{
while (!completed_)
Application.DoEvents();
}
}
我想让代码在1个函数中运行,而不是这样:
private void button_Search_Click(object sender,EventArgs e)
{
WebRequestWaiter WRW = new WebRequestWaiter(webBrowser1);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://example.com/search.php");
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
Stream receiveStream = response.GetResponseStream();
webBrowser1.DocumentStream = receiveStream;
WRW.WaitForComplete();
//Code only continue when webBrowser1 Completed
webBrowser1.Document.GetElementById("keyword").SetAttribute("value",textBox_Search.Text);
foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("input"))
{
if (item.GetAttribute("value") == "Search Now")
{
WRW = new WebRequestWaiter(webBrowser1);
item.InvokeMember("Click");
break;
}
}
WRW.WaitForComplete();
//Code only continue when webBrowser1 Completed !BUT IT WON'T WAIT!
//webBrowser1 contains the previous response
foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("p"))
{
if (item.GetAttribute("className") == "description")
{
foreach (HtmlElement item2 in item.GetElementsByTagName("u"))
{
MessageBox.Show(item2.InnerText); //this is debug
}
break;
}
}
}
我可以这样做,但是当有10个以上时,我会迷失其中,而且我也无法对此进行适当的循环
(我在第一次尝试中也使用了它,但是它做了同样的事情(当webBrowser1.Document仍然包含旧的(先前的)信息时才通过了它):
private void button_Search_Click(object sender,EventArgs e)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted1);
DoSomethingThatChangeThePage();
}
void webBrowser1_DocumentCompleted1(object sender,WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted2);
DoSomethingThatChangeThePage();
}
void webBrowser1_DocumentCompleted2(object sender,WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted3);
DoSomethingThatChangeThePage();
}
void webBrowser1_DocumentCompleted3(object sender,WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted4);
DoSomethingThatChangeThePage();
}
//etc
)
有什么办法可以使我的课堂上班吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)