日期:2014-05-20  浏览次数:21678 次

c#中,怎么实现for循环根据条件暂停执行:即在每一次循环的过程中都要去处理另一个需要几十秒时间的程序,在这个程序完成后返回并再继续f

        程序的情况:
        在winform程序中有一个窗口,在这个窗口中放置了两个webbrowser控件(wbList,wbDetail),左边的用来显示一个web的List列表页面,而在右边显示在List页面加载成功后再分别自动显示列表中每一条记录的Detail详细页面(需要的数据在这里处理).
        遇到的问题:
        现在遇到的问题是,在左边的List页面加载完成后,我在它的DocumentCompleted事件时来循环显示Detail页面,调用的代码是wbDetail.Navigate(strURI);(这个操作比较耗时,估计得有十秒钟左右的),然而在用for循环时分别显示Detail的页面时,由于for循环它就不能停下来,一下子就把循环执行完了,而在每次循环过程中显示需要耗时Detail页面,除了最后一个能正常显示外其它的都不能正常显示!
        需要的处理办法:
        我想到过控制线程,尽可能使这在每一次循环过程中执行wbDetail.Navigate(strURI);时让for循环暂停执行,待wbDetail.Navigate(strURI);执行完成后再继续for循环!但是这个怎么来实现呢?怎么来控件这两个webbrowser控件按照我所设想的顺序来执行的呢?
        除了线程,还有锁等控件代码块操作的方法都可以的,thank:)



------解决方案--------------------
每次启动一个Thread来执行任务,然后通过Thread.Join等待任务执行完毕。
------解决方案--------------------
先引用
using System.Threading;

在代码中需要暂停语句前写
Thread.Sleep(3000);//3000毫秒,多少自己设
------解决方案--------------------
可以使用Event。在WebBrowser.Navigate函数调用后,等待事件消息。在WebBrowser.Navigated事件接收函数中,设置Event。这样的话,for循环就被阻止了。
------解决方案--------------------
搞定了没?

实在不行就用多线程试试看。
单独开一个线程。
private Thread poThread;

private void button1_Click(object sender, EventArgs e)
{
poThread = new Thread(new ThreadStart(myThread));
poThread.IsBackground = true;
poThread.Start();

}

private void myThread()
{
for (int i = 0; i < 10; i++)
{
webBrowser1.Navigate( "http://www.csdn.net ");
Thread.Sleep();
}
}

//在
private void wbDetail_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
poThread.Resume();
}


------解决方案--------------------
参考这里
http://blog.csdn.net/hertcloud/archive/2007/04/07/1556112.aspx

使用多线程 用
将你要执行的部分 写成函数 然后使用 事件委托的模式

while(true){//事件调用.... //Thread.Sleep(10000) 每10秒执行一次}

参考上面地址.