Browse Source

解决进程退出BUG

章政 7 years ago
parent
commit
a6002eceb1
3 changed files with 64 additions and 17 deletions
  1. 3 1
      UAS_Web/Browser.cs
  2. 37 2
      UAS_Web/Program.cs
  3. 24 14
      UAS_Web/tool/RequestHandler.cs

+ 3 - 1
UAS_Web/Browser.cs

@@ -37,7 +37,7 @@ namespace UAS_Web
         private void Browser_FormClosing(object sender, FormClosingEventArgs e)
         {
             webBrowser.GetBrowser().CloseBrowser(true);
-            Cef.Shutdown();
+            Process.GetCurrentProcess().Kill();
         }
 
         private void Browser_Load(object sender, EventArgs e)
@@ -51,5 +51,7 @@ namespace UAS_Web
                 }
             }
         }
+
+     
     }
 }

+ 37 - 2
UAS_Web/Program.cs

@@ -1,8 +1,7 @@
 using CefSharp;
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Security.Principal;
+using System.Text;
 using System.Windows.Forms;
 
 namespace UAS_Web
@@ -21,6 +20,10 @@ namespace UAS_Web
                 WindowsPrincipal principal = new WindowsPrincipal(identity);
                 //设置应用程序处理异常方式:ThreadException处理
                 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
+                //处理UI线程异常
+                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
+                //处理非UI线程异常
+                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                 #region 应用程序的主入口点
                 var setting = new CefSettings();
                 setting.CefCommandLineArgs.Add("disable-gpu", "1");
@@ -51,5 +54,37 @@ namespace UAS_Web
 
             }
         }
+
+        //处理线程的异常
+        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.Exception, e.ToString());
+            MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+        }
+
+        //未处理的异常统一通过这里返回
+        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
+            MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+        }
+
+        /// <summary>
+        /// 生成自定义异常消息
+        /// </summary>
+        /// <param name="ex">异常对象</param>
+        /// <param name="backStr">备用异常消息:当ex为null时有效</param>
+        /// <returns>异常字符串文本</returns>
+        static string GetExceptionMsg(Exception ex, string backStr)
+        {
+            StringBuilder sb = new StringBuilder();
+            if (ex != null)
+            {
+                sb.AppendLine(ex.Message);
+                //sb.AppendLine("【异常方法】:" + ex.StackTrace);
+            }
+            //else { sb.AppendLine("【未处理异常】:" + backStr); }
+            return sb.ToString();
+        }
     }
 }

+ 24 - 14
UAS_Web/tool/RequestHandler.cs

@@ -11,6 +11,10 @@ namespace UAS_Web.tool
     {
         public event Action<byte[]> NotifyMsg;
 
+        string PrinterName = "";
+
+        string PrintType = "";
+
         PrinterList print;
         /// <summary>
         /// 拦截指定请求
@@ -32,6 +36,9 @@ namespace UAS_Web.tool
                 case "zplPrint.action":
                     filter = FilterManager.CreateFilter(request.Identifier.ToString()) as MessageFilter;
                     return filter;
+                case "getPrintType.action":
+                    filter = FilterManager.CreateFilter(request.Identifier.ToString()) as MessageFilter;
+                    return filter;
                 default:
                     break;
             }
@@ -52,25 +59,21 @@ namespace UAS_Web.tool
         {
             MessageFilter filter;
             string str;
+            Dictionary<string, object> data;
             switch (request.Url.Substring(request.Url.LastIndexOf("/") + 1))
             {
                 case "default?type=printer":
+                    //弹出打印机选择列表
                     print = new PrinterList(browser) { StartPosition = FormStartPosition.CenterScreen };
                     print.Controls["Confirm"].Click += RequestHandler_Click;
+                    print.TopMost = true;
                     print.ShowDialog();
-                    filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
-                    str = System.Text.Encoding.UTF8.GetString(filter.dataAll.ToArray());
-                    //filter_NotifyData(filter.dataAll.ToArray());
-                    Console.WriteLine(str);
                     break;
                 case "zplPrint.action":
                     filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
                     str = System.Text.Encoding.UTF8.GetString(filter.dataAll.ToArray());
-                    Console.WriteLine(str);
-
-                    PrintHelper.SendStringToPrinter(print.Controls["Printer"].Text, "");
-                    //filter_NotifyData(filter.dataAll.ToArray());
-                    Dictionary<string, object> data = ToDictionary(str);
+                    data = ToDictionary(str);
+                    //获取所有的打印格式数据
                     string PrintCode = data["data"].ToString();
                     List<string> PrintList = new List<string>();
                     int PrintTime = Regex.Matches(PrintCode, "XA").Count;
@@ -81,9 +84,15 @@ namespace UAS_Web.tool
                     }
                     for (int i = 0; i < PrintList.Count; i++)
                     {
-                        PrintHelper.SendStringToPrinter(print.Controls["Printer"].Text, PrintList[i]);
+                        PrintHelper.SendStringToPrinter(PrinterName, PrintList[i]);
                     }
                     break;
+                case "getPrintType.action":
+                    filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
+                    str = System.Text.Encoding.UTF8.GetString(filter.dataAll.ToArray());
+                    data = ToDictionary(str);
+                    PrintType = data["data"].ToString().Replace("\"","");
+                    break;
                 default:
                     break;
             }
@@ -91,12 +100,13 @@ namespace UAS_Web.tool
 
         private void RequestHandler_Click(object sender, EventArgs e)
         {
+            //设置打印机名称
             print.PrintDoc.PrinterSettings.PrinterName = print.Controls["Printer"].Text;
+            PrinterName = print.Controls["Printer"].Text;
+            //获取矩阵图的分辨率
             Graphics gr = print.PrintDoc.PrinterSettings.CreateMeasurementGraphics();
-            print.browser.MainFrame.ExecuteJavaScriptAsync("(function(value) {dpi=value})('" + gr.DpiX + "')");
-            print.browser.FocusedFrame.ExecuteJavaScriptAsync("console.log(this);");
-            print.browser.FocusedFrame.ExecuteJavaScriptAsync("onGridItemClick();");
- 
+            print.browser.FocusedFrame.ExecuteJavaScriptAsync("(function(value,value1){dpi=value,printType=value1})('" + gr.DpiX + "','" + PrintType + "')");
+            print.browser.FocusedFrame.ExecuteJavaScriptAsync("document.getElementById('confirmZplPrint').click();");
             print.Close();
         }