| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -311,16 +311,22 @@ namespace Apewer.WinForm | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        #region run
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <summary>唯一实例。</summary>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        public static Tray Instance { get; private set; } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <summary>已启动的服务名称。</summary>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        public static string ServiceName { get; private set; } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <summary>在当前线程运行托盘程序,并启动消息循环。</summary>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="action">启动托盘后执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <summary>在当前线程运行托盘程序,并启动消息循环。此方法应在主线程中调用,并且此方法将阻塞当前线程。</summary>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <remarks>托盘启动后,将在后台线程执行参数中指定的程序。</remarks>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="action">(在后台线程执行)启动托盘后执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <exception cref="ArgumentNullException" />
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <exception cref="InvalidOperationException" />
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        [STAThread] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        public static void Run(Action<Tray> action) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (action == null) throw new ArgumentNullException(nameof(action)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (Instance != null) throw new InvalidOperationException($"已存在实例,无法再次启动。"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Control.CheckForIllegalCrossThreadCalls = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Application.EnableVisualStyles(); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -337,14 +343,14 @@ namespace Apewer.WinForm | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var instance = new Tray(action); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Instance = new Tray(action); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // action.Invoke(instance);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Application.Run(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <summary>启动服务。</summary>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="onStart">服务启动后执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="onStop">停止服务时执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="onStart">(在后台线程执行)服务启动后执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        /// <param name="onStop">(同步执行)停止服务时执行的程序。</param>
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        public static void Service(Action onStart, Action onStop = null) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var processName = Process.GetCurrentProcess().ProcessName; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |