WebBrowser 打印后关闭应用程序
Close Application after WebBrowser print
我尝试使用 WebBrowser class 打印格式化的 HTML。打印后,我想关闭应用程序。如果我尝试使用关闭应用程序,打印将无法进行。我试过使用定时器也没有用。
请在下面找到代码。
static void Main(string[] args) {
var b = new Program();
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
b.runBrowserThread("file://" + appPath + "/receipt.html");
}
private void runBrowserThread(string url) {
var th = new Thread(() => {
var br = new WebBrowser();
br.DocumentCompleted += browser_DocumentCompleted;
br.Navigate(url);
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
var br = sender as WebBrowser;
br.Print();
//Application.ExitThread();
Environment.Exit(0);
}
PrintTemplateTeardown
就是您要找的。
您可以添加对 SHDocVw
的引用。然后您可以访问 IWebBrowser2
和 DWebBrowserEvents2_Event
等接口。
您可以在引用管理器 window 的 COM 选项卡中找到 SHDocVw
作为 "Microsoft Internet Controls"。
您可以订阅 DocumentCompleted
事件以了解 file/url 加载何时完成。您可以通过调用 IWebBrowser2.ExecWB
打印 html 文档而不显示打印对话框。您也可以订阅 DWebBrowserEvents2_Event.PrintTemplateTeardown
以了解打印完成的时间,以便您可以关闭应用程序:
using System;
using System.Windows.Forms;
using SHDocVw;
class Program
{
static System.Windows.Forms.WebBrowser browser;
[STAThread]
static void Main()
{
var fileName = "http://google.com";
browser = new System.Windows.Forms.WebBrowser();
browser.ScriptErrorsSuppressed = true;
browser.DocumentCompleted += browser_DocumentCompleted;
browser.Navigate(fileName);
Application.Run();
}
private static void browser_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
var iwb2 = (IWebBrowser2)browser.ActiveXInstance;
var events = (DWebBrowserEvents2_Event)browser.ActiveXInstance;
events.PrintTemplateTeardown += browser_PrintTemplateTeardown;
var missing = Type.Missing;
iwb2.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
ref missing, ref missing);
}
private static void browser_PrintTemplateTeardown(object pDisp)
{
browser.Dispose();
Application.Exit();
}
}
我尝试使用 WebBrowser class 打印格式化的 HTML。打印后,我想关闭应用程序。如果我尝试使用关闭应用程序,打印将无法进行。我试过使用定时器也没有用。
请在下面找到代码。
static void Main(string[] args) {
var b = new Program();
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
b.runBrowserThread("file://" + appPath + "/receipt.html");
}
private void runBrowserThread(string url) {
var th = new Thread(() => {
var br = new WebBrowser();
br.DocumentCompleted += browser_DocumentCompleted;
br.Navigate(url);
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
var br = sender as WebBrowser;
br.Print();
//Application.ExitThread();
Environment.Exit(0);
}
PrintTemplateTeardown
就是您要找的。
您可以添加对 SHDocVw
的引用。然后您可以访问 IWebBrowser2
和 DWebBrowserEvents2_Event
等接口。
您可以在引用管理器 window 的 COM 选项卡中找到 SHDocVw
作为 "Microsoft Internet Controls"。
您可以订阅 DocumentCompleted
事件以了解 file/url 加载何时完成。您可以通过调用 IWebBrowser2.ExecWB
打印 html 文档而不显示打印对话框。您也可以订阅 DWebBrowserEvents2_Event.PrintTemplateTeardown
以了解打印完成的时间,以便您可以关闭应用程序:
using System;
using System.Windows.Forms;
using SHDocVw;
class Program
{
static System.Windows.Forms.WebBrowser browser;
[STAThread]
static void Main()
{
var fileName = "http://google.com";
browser = new System.Windows.Forms.WebBrowser();
browser.ScriptErrorsSuppressed = true;
browser.DocumentCompleted += browser_DocumentCompleted;
browser.Navigate(fileName);
Application.Run();
}
private static void browser_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
var iwb2 = (IWebBrowser2)browser.ActiveXInstance;
var events = (DWebBrowserEvents2_Event)browser.ActiveXInstance;
events.PrintTemplateTeardown += browser_PrintTemplateTeardown;
var missing = Type.Missing;
iwb2.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
ref missing, ref missing);
}
private static void browser_PrintTemplateTeardown(object pDisp)
{
browser.Dispose();
Application.Exit();
}
}