基本上,我希望我的程序将列表加载到ListBox
,并允许用户单击“打印”,将WebBrowser
导航到列表中的每个页面,打印它们全部单独出来。
然而,它只打印了2页(在我的例子中,我在列表框中有4页),然后停止,没有完成循环。 (很可能是由于WebBrowser
控制仍然很忙)
我觉得我在这里犯了一个简单的错误。任何有关造成这种情况的见解都非常感谢!
我的代码:
private void Form1_Load(object sender, EventArgs e)
{
DirSearch(Application.StartupPath);
}
void DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d).Select(Path.GetFileName))
{
listBox1.Items.Add(f);
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
WebBrowser webBrowserForPrinting = new WebBrowser();
webBrowserForPrinting.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(PrintDocument);
foreach (string s in listBox1.Items)
{
try
{
webBrowserForPrinting.Url = new Uri(Application.StartupPath + "\\COAForms\\" + s);
}
catch (Exception)
{
}
}
}
private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Print the document now that it is fully loaded.
((WebBrowser)sender).Print();
}
答案 0 :(得分:0)
Web浏览器控件的一个常见错误是尝试在传统的for
循环中使用它,就像您在这里一样。
WebBrowser页面加载是一个异步操作。这就是DocumentCompleted事件的原因。您需要在循环中考虑到这一点。让DocumentCompleted(例如。PrintDocument
)处理程序加载下一个位置,而不是使用传统的for循环。