MainForm.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. using ProjectManagementSystem.Common.Logger;
  2. using ProjectManagementSystem.Enterance;
  3. using System.Windows.Forms;
  4. using System;
  5. using System.Threading;
  6. using System.Linq;
  7. using System.Data;
  8. using System.Configuration;
  9. using ProjectManagementSystem.UI;
  10. using System.Collections.Generic;
  11. using ProjectManagementSystem.Common.Function;
  12. using System.Diagnostics;
  13. using AutoUpdaterDotNET;
  14. namespace ProjectManagementSystem
  15. {
  16. public partial class MainForm : Form
  17. {
  18. private string m_allTagPage;
  19. private UI.LogUI logUI1;
  20. private List<IDisplayUI> m_idisplayUIList = new List<IDisplayUI>();
  21. public MainForm()
  22. {
  23. InitializeComponent();
  24. ShowInTaskbar = false;
  25. this.Width = 1200;
  26. this.Height = 618;
  27. m_allTagPage = AppSetting.TryGetValue<string>("TabPage");
  28. if (string.IsNullOrEmpty(m_allTagPage))
  29. {
  30. this.WindowState = FormWindowState.Minimized;
  31. }
  32. }
  33. private void MainForm_Shown(object sender, System.EventArgs e)
  34. {
  35. if (string.IsNullOrEmpty(m_allTagPage))
  36. {
  37. this.Visible = false;
  38. }
  39. //var names = Common.WebApi.PmsApi.GetPmsWebApiNames();
  40. string systemEnteranceName = AppSetting.TryGetValue<string>("SystemEnteranceName");
  41. if(string.IsNullOrEmpty(systemEnteranceName))
  42. {
  43. AutoUpdater.Synchronous = true;
  44. AutoUpdater.ShowSkipButton = false;
  45. AutoUpdater.ShowRemindLaterButton = false;
  46. AutoUpdater.UpdateFormSize = new System.Drawing.Size(500, 300);
  47. AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent;
  48. AutoUpdater.Start(AppSetting.GetAutoUpdateUrl());
  49. }
  50. CLog.Instance.OnLog += Instance_OnLog;
  51. var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
  52. var dateTime = System.IO.File.GetLastWriteTime(this.GetType().Assembly.Location).ToString("yyyyMMddHHmmss");
  53. this.Text = $"PMS{version} ({dateTime})";
  54. string link = AppSetting.GetCasunAgvUrl();
  55. this.linkLabel1.Links.Add(0, 2, link);
  56. this.linkLabel1.Links.Add(3, 7, $@"{link}/#/taskConfig/taskQuery/currentTask");
  57. CLog.Instance.SystemLog.WriteInfo($"开始启动,版本:{this.Text}");
  58. if (!string.IsNullOrEmpty(systemEnteranceName))
  59. {
  60. //SystemEnterance systemEnterance = new SystemEnterance();
  61. var name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
  62. string fullClassName = $"{name}.Enterance.{systemEnteranceName}";
  63. var systemEnterance = InstanceConstructor.GetInstance<object>(name, fullClassName);
  64. if(systemEnterance == null)
  65. {
  66. MessageBox.Show($"创建“{systemEnteranceName}”失败,程序退出!!!");
  67. ShutDown();
  68. return;
  69. }
  70. }
  71. InitTablePage();
  72. System.Threading.Tasks.Task.Factory.StartNew(DisplayThread);
  73. CLog.Instance.SystemLog.WriteInfo($"启动完毕");
  74. }
  75. private void AutoUpdater_ApplicationExitEvent()
  76. {
  77. Text = @"Closing application...";
  78. ShutDown();
  79. }
  80. private void InitTablePage()
  81. {
  82. try
  83. {
  84. if (string.IsNullOrEmpty(m_allTagPage))
  85. {
  86. return;
  87. }
  88. string[] tabPageArray = m_allTagPage.Split(new char[] { '|' });
  89. for (int i = 0; i < tabPageArray.Length; i++)
  90. {
  91. Application.DoEvents();
  92. string pagInfoStr = tabPageArray[i];
  93. string[] pageInfos = pagInfoStr.Split(new char[] { ':' });
  94. string page = pageInfos[0];
  95. TabPage tabPage = new TabPage();
  96. tabPage.Name = "tabPage" + (i + 1);
  97. tabPage.TabIndex = i + 10;
  98. tabPage.Text = pageInfos[1];
  99. tabPage.UseVisualStyleBackColor = true;
  100. tabPage.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  101. this.tabControl1.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  102. Control controlUI = GetControlUI(page);
  103. if (controlUI == null)
  104. {
  105. MessageBox.Show($"“{pagInfoStr}” 获取界面失败,程序退出!!!");
  106. ShutDown();
  107. return;
  108. }
  109. controlUI.Dock = DockStyle.Fill;
  110. IDisplayUI displayUI = controlUI as IDisplayUI;
  111. if (displayUI == null)
  112. {
  113. MessageBox.Show($"“{pagInfoStr}” 界面不满足接口:IDisplayUI,程序退出!!!");
  114. ShutDown();
  115. return;
  116. }
  117. if (logUI1 == null)
  118. {
  119. logUI1 = controlUI as LogUI;
  120. }
  121. tabPage.Controls.Add(controlUI);
  122. this.tabControl1.Controls.Add(tabPage);
  123. if (!displayUI.Init())
  124. {
  125. MessageBox.Show($"“{pagInfoStr}” 界面初始化失败,程序退出!!!");
  126. ShutDown();
  127. return;
  128. }
  129. m_idisplayUIList.Add(displayUI);
  130. CLog.Instance.SystemLog.WriteDebug($"已加载界面:“{tabPage.Text}”");
  131. Application.DoEvents();
  132. }
  133. }
  134. catch (Exception ex)
  135. {
  136. CLog.Instance.SystemLog.WriteException("MainForm", ex);
  137. string logContext = $"启动失败:{ex.Message}";
  138. System.Windows.Forms.MessageBox.Show(logContext);
  139. ShutDown();
  140. }
  141. }
  142. private Control GetControlUI(string page)
  143. {
  144. var name = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
  145. string fullClassName = $"{name}.UI.{page}";
  146. return InstanceConstructor.GetInstance<Control>(name, fullClassName);
  147. }
  148. public void DisplayThread()
  149. {
  150. CLog.Instance.SystemLog.WriteDebug($"DisplayThread已启动");
  151. byte couter = 0;
  152. while (true)
  153. {
  154. try
  155. {
  156. for (int i = 0; i < m_idisplayUIList.Count; i++)
  157. {
  158. m_idisplayUIList[i].UpdateDisplay();
  159. }
  160. }
  161. catch (Exception ex)
  162. {
  163. CLog.Instance.SystemLog.WriteException("MainForm", ex);
  164. Thread.Sleep(5000);
  165. }
  166. couter++;
  167. Thread.Sleep(1000);
  168. }
  169. }
  170. private void Instance_OnLog(int degree, string obj)
  171. {
  172. if (logUI1 != null
  173. && degree <= logUI1.DisplayDegree)
  174. {
  175. logUI1.AddLog(degree, obj);
  176. }
  177. }
  178. private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
  179. {
  180. e.Cancel = true;
  181. this.Invoke(new MethodInvoker(() =>
  182. {
  183. WindowState = FormWindowState.Minimized;
  184. ShowInTaskbar = false;
  185. Visible = false;
  186. }));
  187. }
  188. private void 关闭系统ToolStripMenuItem_Click(object sender, System.EventArgs e)
  189. {
  190. var dialogResult = MessageBox.Show("确定要关闭系统", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
  191. if (dialogResult == DialogResult.OK)
  192. {
  193. CLog.Instance.SystemLog.WriteInfo($"关闭系统");
  194. ShutDown();
  195. }
  196. }
  197. private void ShutDown()
  198. {
  199. Close();
  200. Dispose();
  201. Application.Exit();
  202. Process[] process = Process.GetProcesses();
  203. Process currentProcess = Process.GetCurrentProcess();
  204. for (int i = 0; i < process.Count(); i++)
  205. {
  206. if (process[i].ProcessName == currentProcess.ProcessName)
  207. {
  208. process[i].Kill();
  209. }
  210. }
  211. }
  212. private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
  213. {
  214. if (string.IsNullOrEmpty(m_allTagPage)) return;
  215. this.Visible = true;
  216. this.WindowState = FormWindowState.Maximized;
  217. this.TopMost = true;
  218. this.TopMost = false;
  219. }
  220. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  221. {
  222. //linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;
  223. string targetUrl = e.Link.LinkData as string;
  224. if (string.IsNullOrEmpty(targetUrl))
  225. MessageBox.Show("没有链接地址!");
  226. else
  227. System.Diagnostics.Process.Start(targetUrl);
  228. }
  229. }
  230. }