Explorar el Código

实时事件修改

shim hace 7 años
padre
commit
e9e1bc8952
Se han modificado 2 ficheros con 78 adiciones y 3 borrados
  1. 8 0
      UAS_CheckWork/Form2.cs
  2. 70 3
      UAS_CheckWork/Program.cs

+ 8 - 0
UAS_CheckWork/Form2.cs

@@ -51,6 +51,7 @@ namespace UAS_CheckWork
                 bIsConnected = false;
                 btnConnect.Text = "连接";
                 lblState.Text = "状态:未连接";
+                startListening.Text = "开始实时事件";
                 Cursor = Cursors.Default;
                 return;
             }
@@ -78,12 +79,19 @@ namespace UAS_CheckWork
                 MessageBox.Show("请先连接设备", "Error");
                 return;
             }
+            if (startListening.Text== "正在实时监听")
+            {
+                MessageBox.Show("已启动监听", "Error");
+                return;
+            }
             int idwErrorCode = 0;
             //开始注册考勤机的监听事件
             if (axCZKEM1.RegEvent(iMachineNumber, 1))//65535表示注册所有的事件
             {
                 //注册事件
                 this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
+                //注册成功提示用户
+                startListening.Text = "正在实时监听";
             }
             else
             {

+ 70 - 3
UAS_CheckWork/Program.cs

@@ -1,6 +1,8 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Security.Principal;
+using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 
@@ -14,9 +16,74 @@ namespace UAS_CheckWork
         [STAThread]
         static void Main()
         {
-            Application.EnableVisualStyles();
-            Application.SetCompatibleTextRenderingDefault(false);
-            Application.Run(new Form1());
+            try
+            {
+                WindowsIdentity identity = WindowsIdentity.GetCurrent();
+                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 应用程序的主入口点
+                Application.EnableVisualStyles();
+                Application.SetCompatibleTextRenderingDefault(false);
+                ////处理全局事件
+                //GlobalEventsHandler g = new GlobalEventsHandler();
+                //添加全局事件的监听
+                //Application.AddMessageFilter(g);
+                if (principal.IsInRole(WindowsBuiltInRole.Administrator))
+                    Application.Run(new Form2());
+                else
+                {
+                    //创建启动对象
+                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
+                    // 设置运行文件
+                    startInfo.FileName = Application.ExecutablePath;
+                    //设置启动动作,确保以管理员身份运行
+                    startInfo.Verb = "runas";
+                    //如果不是管理员,则启动UAC
+                    System.Diagnostics.Process.Start(startInfo);
+                }
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                string str = GetExceptionMsg(ex, string.Empty);
+                MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+        //处理线程的异常
+        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();
         }
     }
 }