0

本质上,我希望我的程序将一个列表加载到 中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();

}
4

1 回答 1

0

Web 浏览器控件的一个常见错误是尝试在传统for循环中使用它,就像您在这里一样。

WebBrowser 页面加载是一个异步操作。这就是为什么会有 DocumentCompleted 事件。您需要在循环中考虑到这一点。让 DocumentCompleted(例如PrintDocument)处理程序加载下一个位置,而不是使用传统的 for 循环。

于 2013-01-23T23:27:18.780 回答