|
|
@ -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; |
|
|
|