GuDingZiChan/print-agent-dotnet/FixedAssetPrintAgent/PrintAgentApplicationContext.cs
WuYongJie c7a9324635 feat(打印): 新增远程标签打印与 .NET 打印助手
- 新增打印终端、配对码、打印任务相关表结构与接口\n- 增加后台打印终端/任务管理页和资产标签远程打印入口\n- 引入 .NET 8 Windows 打印助手源码及下载清单配置
2026-03-25 21:05:30 +08:00

121 lines
3.0 KiB
C#

namespace FixedAssetPrintAgent;
internal sealed class PrintAgentApplicationContext : ApplicationContext
{
private readonly NotifyIcon _notifyIcon;
private readonly PrintAgentRuntime _runtime;
private readonly MainForm _mainForm;
private bool _exitRequested;
public PrintAgentApplicationContext()
{
var storageRoot = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"FixedAssetPrintAgent");
_runtime = new PrintAgentRuntime(storageRoot, Application.ProductVersion, Application.ExecutablePath);
_runtime.StateChanged += HandleStateChanged;
_mainForm = new MainForm(_runtime);
_mainForm.FormClosing += HandleMainFormClosing;
_notifyIcon = new NotifyIcon
{
Icon = SystemIcons.Application,
Visible = true,
Text = "固定资产打印助手"
};
_notifyIcon.DoubleClick += (_, _) => ShowMainWindow();
_notifyIcon.ContextMenuStrip = BuildContextMenu();
_ = InitializeAsync();
}
private async Task InitializeAsync()
{
try
{
await _runtime.InitializeAsync();
if (!_runtime.CurrentState.IsPaired)
{
ShowMainWindow();
}
}
catch (Exception ex)
{
MessageBox.Show(
$"打印助手初始化失败:{ex.Message}",
"打印助手",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
ShowMainWindow();
}
}
private ContextMenuStrip BuildContextMenu()
{
var menu = new ContextMenuStrip();
menu.Items.Add("打开打印助手", null, (_, _) => ShowMainWindow());
menu.Items.Add("立即发送心跳", null, async (_, _) => await _runtime.HeartbeatNowAsync());
menu.Items.Add("立即轮询任务", null, async (_, _) => await _runtime.ClaimNowAsync());
menu.Items.Add(new ToolStripSeparator());
menu.Items.Add("退出", null, (_, _) => ExitApplication());
return menu;
}
private void HandleStateChanged(object? sender, PrintAgentRuntimeState state)
{
var summary = state.IsPaired
? string.IsNullOrWhiteSpace(state.Configuration.SelectedPrinterName)
? "待配置打印机"
: "已配对"
: "未配对";
var text = $"固定资产打印助手 - {summary}";
_notifyIcon.Text = text.Length > 63 ? text[..63] : text;
}
private void HandleMainFormClosing(object? sender, FormClosingEventArgs e)
{
if (_exitRequested)
{
return;
}
e.Cancel = true;
_mainForm.Hide();
}
private void ShowMainWindow()
{
if (_mainForm.Visible)
{
_mainForm.WindowState = FormWindowState.Normal;
_mainForm.Activate();
return;
}
_mainForm.Show();
_mainForm.WindowState = FormWindowState.Normal;
_mainForm.BringToFront();
_mainForm.Activate();
}
private void ExitApplication()
{
_exitRequested = true;
_notifyIcon.Visible = false;
_mainForm.Close();
ExitThread();
}
protected override void ExitThreadCore()
{
_notifyIcon.Visible = false;
_notifyIcon.Dispose();
_runtime.Dispose();
base.ExitThreadCore();
}
}